Mar*_*tin 2 java synchronization
我想使用旧方式(int i ...)循环遍历java List,因为对于给定的i和循环迭代,我想访问相对于i的几个元素.然后我不能使用(对象o:对象)列表迭代器.
在执行时,如何确保没有其他代码可以访问列表?
我试过了
synchronized(path.getPoints()){
for (int i = 0; i < path.getPoints().size(); i++){
...
}
}
Run Code Online (Sandbox Code Playgroud)
其中path是保存列表的对象,也是
synchronized(path){
for (int i = 0; i < path.getPoints().size(); i++){
...
}
}
Run Code Online (Sandbox Code Playgroud)
并且
synchronized(this){
for (int i = 0; i < path.getPoints().size(); i++){
...
}
}
Run Code Online (Sandbox Code Playgroud)
其中"this"是想要在没有同步问题的情况下完全呈现路径的渲染器.
提前致谢,
马丁
在执行时,如何确保没有其他代码可以访问列表?
通过确保所有其他代码也同步在同一对象上.synchronized(path.getPoints())是最好的选择.getPoints()返回包含的列表可能是一个好主意Collections.synchronizedList()- 然后您不需要显式同步简单get()或add()调用,但仍需要迭代的同步.
复杂?是啊.这就是共享内存多线程编程被认为非常困难的原因.
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |