我有一个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块来进行复合操作
  • 10-06 03:32