使用synchronizedCollection和同步(集合)有什么区别?

时间:2016-05-21 03:18:34

标签: java collections synchronization

1.6 Javadoc对此并不清楚。有什么区别

List l = LinkedList();
synchronized (l) {
    l.add... // do some work
    l.set...
    l.remove...
}

VS

List l = LinkedList();
Collection c = Collections.synchronizedCollection (l);
synchronized (c) {
    c.add...; c.set....; c.remove...
}

??? 为什么需要synchronizedCollection类?第一种方法有什么问题?

1 个答案:

答案 0 :(得分:2)

  

第一种方法有什么问题?

没有任何问题:只要您同步所有访问权限,您的程序就会按预期执行。

  

为什么需要synchronizedCollection类?

如果你打算在synchronized块中使用它,那么确实没有理由:集合中的额外同步不会锁定其他读者和编写者,因为synchronized块已经存在此

首先使用synchronizedCollection的原因是避免synchronized阻止。未经同步调用addsetremove不会使您的收藏集处于无效状态。

但是,如果语句外没有synchronized块,则三个单独的操作不会作为原子块执行。