黑马程序员技术交流社区

标题: 关于Collections的synchronizedList方法 [打印本页]

作者: 蓝色骨头    时间: 2013-4-17 11:52
标题: 关于Collections的synchronizedList方法
本帖最后由 蓝色骨头 于 2013-4-20 10:28 编辑

如Collections的synchronizedList方法返回一个线程安全的list

有一个疑问想问一下各位大神

当我们在迭代这个list时,对于list的添加和删除是否会阻塞


作者: java冬冬    时间: 2013-4-17 12:21
占个位置{:soso_e152:}
作者: 高梦晓    时间: 2013-4-17 15:52
synchronizedList是synchronizedCollection的子类,她的实现是用synchronized块通过信号量来实现同步的
作者: 陈雨    时间: 2013-4-17 16:41
应该不会,synchronizedList(List<T>list)将不安全的集合返回至安全的集合,不同步变成同步,它将要添加和删除方法封装至一个锁里面,某一时刻只能有一个线程进行添加或者删除动作.
作者: gerenvip    时间: 2013-4-17 21:42
我查看了一下API文档中的synchronizedList方法,以下是文档的说明,明确说明了返回的列表的操作注意事项,
在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:
  1. List list = Collections.synchronizedList(new ArrayList());
  2.       ...
  3.   synchronized(list) {
  4.       Iterator i = list.iterator(); // Must be in synchronized block
  5.       while (i.hasNext())
  6.           foo(i.next());
  7.   }
复制代码
不遵从此建议将导致无法确定的行为。
所以,楼主说的在迭代中对List集合进行操作会不会阻塞,我想有可能会阻塞。而且很有可能会产生其他问题。
所以以后使用的过程中不能忽略这一点。
希望能帮到你!

作者: 黄玉昆    时间: 2013-4-18 20:15
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
作者: 蓝色骨头    时间: 2013-4-20 10:28
gerenvip 发表于 2013-4-17 21:42
我查看了一下API文档中的synchronizedList方法,以下是文档的说明,明确说明了返回的列表的操作注意事项,
...

  非常感谢
作者: gerenvip    时间: 2013-4-20 10:34
蓝色骨头 发表于 2013-4-20 10:28
非常感谢

呵呵!共同学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2