https://www.cnblogs.com/hongdada/p/10931891.html
使用方式
官方文档就是下面的使用方式
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
既然封装类内部已经加了对象锁,为什么外部还要加一层对象锁?
看源码可知,Collections.synchronizedList中很多方法,比如equals, hasCode, get, set, add, remove, indexOf, lastIndexOf 都添加了锁,但是List中
Iterator<E> iterator();
这个方法没有加锁,不是线程安全的,所以如果要遍历,还是必须要在外面加一层锁。