我想迭代一個java List,使用舊的方式for(int i ...)循環,因爲對於給定的i和循環迭代,我想訪問多個相對於i的元素。然後我不能使用(Object o:objects)列表迭代器。關於java同步的簡單問題
我該如何確保在執行它時沒有其他代碼可以訪問列表?
我試圖
synchronized(path.getPoints()){
for (int i = 0; i < path.getPoints().size(); i++){
...
}
}
其中路徑對象容納的列表,並且還
synchronized(path){
for (int i = 0; i < path.getPoints().size(); i++){
...
}
}
也
synchronized(this){
for (int i = 0; i < path.getPoints().size(); i++){
...
}
}
其中 「這」 是想渲染器在沒有同步問題的情況下退出路徑。
由於提前,
馬丁
您發佈的同步代碼應該適用於所有三種情況。你確定你沒有其他線程訪問同步守衛之外的路徑嗎? – templatetypedef 2011-03-31 09:44:39
是什麼讓你認爲另一個線程正在訪問列表? – 3urdoch 2011-03-31 09:47:12
@murdoch:我有一個編輯器線程在後臺運行,一個UI線程連續運行並呈現點列表。 @template:我只同步這兩個線程中的一個,而不是兩個 – Martin 2011-04-01 10:31:03