线程安全Collections.synchronizedList
来源:互联网 发布:钱夫人淘宝店衣服批发 编辑:程序博客网 时间:2024/05/01 11:03
Collections.synchronizedList引发的线程安全问题
有些容器是线程安全的(Vector,ConcurrentLinkedQueue等),有些则不是(list等),利用类
似 private static List<Task> taskQueue = Collections.synchronizedList(new
LinkedList<Task>());的方法可以得到本身不是线程安全的容易的线程安全的状态,但是要注意
的是线程安全仅仅指的是如果直接使用它提供的函数,比如:queue.add(obj); 或者
queue.poll(obj);,这样我们自己不需要做任何同步。
但如果是非原子操作,比如:
1. if(!queue.isEmpty()) {
2. queue.poll(obj);
3. }
我们很难保证,在调用了isEmpty()之后,poll()之前,这个queue没有被其他线程修改。
所以对于这种情况,我们还是需要自己同步:
1. synchronized(queue) {
2. if(!queue.isEmpty()) {
3. queue.poll(obj);
4. }
5. }
对于Collections.synchronizedList(new LinkedList<Task>()),
在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:
List list = Collections.synchronizedList(new ArrayList()); ... synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block while (i.hasNext())
foo(i.next()); }
http://blog.sina.com.cn/s/blog_5efa3473010129pw.html
- 线程安全Collections.synchronizedList
- 线程安全Collections.synchronizedList
- 线程安全Collections.synchronizedList
- 线程安全Collections.synchronizedList
- 线程安全Collections.synchronizedList
- 线程安全之Collections.synchronizedList
- 线程安全之Collections.synchronizedList
- 线程安全的Collections.synchronizedList
- 线程安全类--Collections.synchronizedList()
- Java基础之集合框架--Collections.synchronizedList() 线程安全的List
- Collections.synchronizedList
- Collections.synchronizedList
- Collections.synchronizedList
- Collections.synchronizedList 初次使用
- Collections.synchronizedList 工厂方法
- Collections分析之SynchronizedList
- Collections.synchronizedList(list)
- Collections.synchronizedList()方法
- 一个菜鸟IT男从门外“窥”技术
- apache-maven-3.2.1安装和环境配置
- 向OS X添加静态路由的方法
- dbd面板类型
- 集合简述
- 线程安全Collections.synchronizedList
- struts2常用标签
- 网络流sap算法(whitecloud)
- KMP求周期uva10298
- 谈谈数据库中MyISAM与InnoDB区别
- 【Java图表绘制-JFreeChart】
- 做一个正气的杭电人 2500
- 【asp.net小札记】自定义文件夹访问权限
- TOJ 4620