use*_*811 2 java list synchronized
我想知道这些同步方式之间的区别是什么
List<Integer> intList = Collections.synchronizedList(new ArrayList<Integer>());
synchronized (intList) {
//Stuff
}
Run Code Online (Sandbox Code Playgroud)
并使用对象锁
Object objectLock = new Object();
List<Integer> intList = new ArrayList<Integer>();
synchronized (objectLock) {
//Stuff
}
Run Code Online (Sandbox Code Playgroud)
第一种方法确保单个方法调用是同步的,并且它避免了需要管理单独的锁对象.一个线程可以调用
intList.add(3);
Run Code Online (Sandbox Code Playgroud)
另一个可以打电话
intList.clear();
Run Code Online (Sandbox Code Playgroud)
没有synchronized块,它将被正确同步.(不幸的是,当你需要为一组函数调用保持锁定时,这没有用;然后,你需要synchronized围绕这些调用阻塞.)另外,如果你需要传递列表,你可以使用
otherObject.doStuffWith(intList);
Run Code Online (Sandbox Code Playgroud)
和
return intList;
Run Code Online (Sandbox Code Playgroud)
代替
otherObject.doStuffWith(intList, objectLock);
Run Code Online (Sandbox Code Playgroud)
和
return ListAndLock(intList, objectLock);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |