我具有其中一個多線程的Java代碼:同步在本地變量
- 幾個線程讀取來自同步共享存儲(即,作爲其結果,某些線程可能引用相同的對象)狀態的對象;
- 然後每個線程調用一個方法
process()
並在那裏傳遞它的對象; process()
以某種方式處理對象,這可能導致更改對象狀態;- 這些狀態更改應該同步。
我創建了一個方法,像:
public void process(Foo[] foos) {
for (final Foo foo : foos) {
if (foo.needsProcessing()) {
synchronized (foo) {
foo.process(); // foo's state may be changed here
}
}
}
}
據我所知,這看起來合法的。然而,IntelliJ的檢查抱怨同步本地變量,因爲「不同的線程很可能有不同的本地實例」(這是而不是對我有效,因爲我是而不是初始化方法中的foos)。
本質上我想在這裏實現的是具有方法Foo.process()同步(這不是我的選擇,因爲Foo是第三方庫的一部分)相同。
我習慣了沒有黃色標記的代碼,所以來自社區的任何建議都是值得讚賞的。這對於在本地進行同步真的很糟糕嗎?有沒有其他的方法可以適用於我的情況?
在此先感謝!
對,謝謝! 順便說一句,你對這裏的主要問題有什麼看法?這與當地人同步真的很糟糕嗎? – 2009-11-27 14:43:21