Collection.synchronized*方法注意事项

引API的一句话:

返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。

在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:

  List list = Collections.synchronizedList(new ArrayList());
      ...
  synchronized(list) {
      Iterator i = list.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }
 
不遵从此建议将导致无法确定的行为。

如果指定列表是可序列化的,则返回的列表也将是可序列化的。



这点在Collections.synchronized*方法都一样,在遍历时必须对集合再进行一次同步,防止其他线程修改集合元素。

你可能感兴趣的:(Java)