我有一个ArrayList,并且只能在一个同步块(synchronized block)中对其进行操作,我也应该使用Collections.synchronizedList吗?
例子:
List list = Collections.synchronizedList(new ArrayList());
// versus List list = new ArrayList();
synchronized(list) {
// my code
}
最佳答案
synchronized
块中的列表,则不需要synchronizedList()
add()
,remove()
等)访问列表,并且这些操作的调用互不依赖(即原子性不成问题),则您只能使用synchronizedList()
而不使用显式的synchronized
块synchronized
块的情况下调用基本操作,但又具有应该是原子的复合操作(包括迭代),则需要synchronizedList()
和synchornized
块来进行复合操作