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
相关推荐
NULL 博文链接:https://username2.iteye.com/blog/1812796
Spring数据mongodb测试 在Collections.synchronizedList或Collections.synchronizedSet上测试spring数据mongodb ConcurrentModificationException
commons-collections-20040616.jar, ...commons-collections.jar, commons-collections3-3.2.1.jar, commons-collections4-4.1-javadoc.jar, commons-collections4-4.1-src.zip, commons-collections4-4.1.jar
使用Collections.synchronizedList(new ArrayList()):内部直接将接受的List对象传递给静态内部类SynchronizedList对象,然后Collections.synchronizedList(new ArrayList())返回的List对象的调用方法都是直接调用...
各个不同 iesi.collections.dll 版本大全,希望能够帮助到需要的人!
列举系统中的环境变量,listView1,System.Collections.DictionaryEntry EnValue in Environment.GetEnvironmentVariables()C#源代码 用VisualStudio2008创建
JSF开发所必需包:花了很长时间才收集好,很费时,现已收集好,何不分享给大家,让大家节省时间做点有意义的事情呢?...commons-collections.jar commons-digester.jar jsf-api.jar jsf-impl.jar jstl.jar standard.jar
Iesi.Collections.dll
Kotlin的不可变集合接口和实现原型。
kotlinx.collections.immutable, Kotlin的不可变集合 Prototype Kotlin的不可变集合库 Kotlin的不可变集合接口和实现 Prototype 。有关详细信息,请参阅建议列表。Prototype实现基于 pcollections ( 版权 2015的作者...
spring.jar, commons-collections.jar, commons-dbcp.jar, commons-pool.jar
Java.Generics.and.Collections.Oct.2006.pdf 完美清晰正版
Java Generics and Collections.pdf
commons-beanutils-bean-collections.jar commons-beanutils-bean-collections.jar
NULL 博文链接:https://xuedong.iteye.com/blog/1147254
Java Collections.pdf 作者john zukowski