java学习笔记之容器的同步与只读控制
2015-09-23 17:30
501 查看
1、容器的同步
多线程并发访问集合的线程安全。
常用容器ArrayList、HashMap、HashSet等都是线程不安全的。
java.util.Collections提供了synchronizedXxx()方法将指定容器包装成同步。
synchronizedList(List list); synchronizedSet(Set set); synchronizedMap(Map map);
例子:
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 容器的同步 * @author ly1 * */ public class TestSyn { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); List<String> list2 = new ArrayList<String>(); // 这里list2是线程安全的 list2 = Collections.synchronizedList(list); } }
2、只读访问
容器内的元素只读,不可修改。
java.util.Collections提供了三种方法:
empty(Xxx xx); 空的不可变的集合 singleton(Object o); 含指定对象的一个元素的不可变的集合 unmodifiableXxx(Xxx xx); 不可变容器
例子:
import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * 容器的只读控制 * * @author ly1 * */ public class TestReadOnly { public static void main(String[] args) { //1、只读空容器 Set set = fun(null); System.out.println(set.size()); //set.add("ele"); //引发java.lang.UnsupportedOperationException //2、只含一个对象的只读容器 Set singleton = Collections.singleton(new String("Hello")); System.out.println(singleton.size()); //singleton.add("ele"); //引发java.lang.UnsupportedOperationException //3、只读容器 Set ReadOnlySet = new HashSet(); ReadOnlySet.add("hi"); ReadOnlySet.add("hello"); ReadOnlySet.add("welcome"); ReadOnlySet = Collections.unmodifiableSet(ReadOnlySet); System.out.println(singleton.size()); //ReadOnlySet.add("ele"); 引发java.lang.UnsupportedOperationException } public static Set fun(Set set){ //这里操作set //返回set,避免返回null,引发NullPointerException return set == null ? Collections.emptySet() : set; } }
相关文章推荐
- Java基础知识总结之IO流
- 在eclipse中,将java工程转换成web工程
- Spring系列之装配Bean
- java.lang.Class.asSubclass()方法实例
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
- 一天入门Java快速入门
- Spring+MyBatis组合开发简单实例
- SpringMVC笔记——Spring+MyBatis组合开发简单实例
- java截取字符串,截串,substring和split,分割字母和数字,正则缝隙
- SpringMVC 分页
- java学习笔记泛型简述
- 关于bcprov-jdk16
- eclipse 字体主题(color theme)
- eclipse下用gradle 来打包Android
- java实现三种数据库连接完整的demo
- spring声明式事务处理(使用jdbc操作数据库)
- spring Jdbc自动获取主键。
- [转]Java中系统属性Properties介绍 System.getProperty()参数大全
- Eclipse 开发快捷键使用详解
- Spring种常见异常解决方法