线程安全Collections.synchronizedList
来源:互联网 发布:什么软件可以查船航 编辑:程序博客网 时间:2024/05/01 18:37
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()); }
- 线程安全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()方法
- ssh localhost 登陆后 ls 命令不能使用,无效的原因
- 自学考试-数据结构
- YUV格式说明 YUYV JPEG
- js中常用的正则表达式
- 关键词推荐工具中的用户引导机制
- 线程安全Collections.synchronizedList
- exit
- Java转型(向上或向下转型)
- 大量的数据中除去其中有同样数的数据(树递归的一个应用)
- 求两个数的最大公约数和最小公倍数
- When I write #include <qdom.h> it gives error "no such file or directory".
- Android开发有用的一些网站,不断更新
- __repr__
- matlab与VC++进行混合编程