[英]Java Synchronized Collections vs Object
我想知道这些同步方式之间有什么区别
List<Integer> intList = Collections.synchronizedList(new ArrayList<Integer>());
synchronized (intList) {
//Stuff
}
并使用对象锁
Object objectLock = new Object();
List<Integer> intList = new ArrayList<Integer>();
synchronized (objectLock) {
//Stuff
}
第一种方法确保单个方法调用是同步的,并且避免了需要管理单独的锁对象。 一个线程可以调用
intList.add(3);
另一个可以打电话
intList.clear();
没有synchronized
块,它将被正确同步。 (不幸的是,当您需要为一组函数调用保持锁定时,这无济于事;然后,在这些调用周围需要一个synchronized
块。)此外,如果您需要传递列表,则可以使用
otherObject.doStuffWith(intList);
和
return intList;
代替
otherObject.doStuffWith(intList, objectLock);
和
return ListAndLock(intList, objectLock);
您显示的代码不一定是线程安全的!!
一个摘录和另一个摘录之间的唯一区别是用作同步监视器的对象。 这种差异将确定需要访问您要保护的可变数据的其他线程应使用哪个对象进行同步
很好的阅读: 实践中的Java并发
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.