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类?第一种方法有什么问题?
答案 0 :(得分:2)
第一种方法有什么问题?
没有任何问题:只要您同步所有访问权限,您的程序就会按预期执行。
为什么需要synchronizedCollection类?
如果你打算在synchronized
块中使用它,那么确实没有理由:集合中的额外同步不会锁定其他读者和编写者,因为synchronized
块已经存在此
首先使用synchronizedCollection
的原因是避免synchronized
阻止。未经同步调用add
,set
和remove
不会使您的收藏集处于无效状态。
但是,如果语句外没有synchronized
块,则三个单独的操作不会作为原子块执行。