Jim*_*mmy 5 java multithreading synchronization
如果我对同步块中的列表执行某些操作,是否会阻止其他线程在其他位置访问该列表?
List<String> myList = new ArrayList<String>();
synchronized {
mylist.add("Hello");
}
Run Code Online (Sandbox Code Playgroud)
这是否会阻止其他线程迭代myList并删除/添加值?
我正在寻找从列表中添加/删除值,但同时保护它免受其他线程/方法的迭代(因为列表中的值可能无效)
sle*_*ske 12
不,不是的.
该synchronized块仅阻止其他线程进入块(更准确地说,它阻止其他线程进入同一对象实例上同步的所有块 - 在这种情况下块同步this).
您需要在synchronized块中使用要保护的实例:
synchronized(myList) {
mylist.add("Hello");
}
Run Code Online (Sandbox Code Playgroud)
整个区域在Java教程中得到了很好的解释:
http://download.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
| 归档时间: |
|
| 查看次数: |
8332 次 |
| 最近记录: |