A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓝色骨头 中级黑马   /  2013-4-17 11:52  /  5885 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蓝色骨头 于 2013-4-20 10:28 编辑

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

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

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

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
占个位置{:soso_e152:}
回复 使用道具 举报
synchronizedList是synchronizedCollection的子类,她的实现是用synchronized块通过信号量来实现同步的
回复 使用道具 举报
应该不会,synchronizedList(List<T>list)将不安全的集合返回至安全的集合,不同步变成同步,它将要添加和删除方法封装至一个锁里面,某一时刻只能有一个线程进行添加或者删除动作.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我查看了一下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集合进行操作会不会阻塞,我想有可能会阻塞。而且很有可能会产生其他问题。
所以以后使用的过程中不能忽略这一点。
希望能帮到你!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
gerenvip 发表于 2013-4-17 21:42
我查看了一下API文档中的synchronizedList方法,以下是文档的说明,明确说明了返回的列表的操作注意事项,
...

  非常感谢
回复 使用道具 举报
蓝色骨头 发表于 2013-4-20 10:28
非常感谢

呵呵!共同学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马