當java線程彼此通信但不需要顯式同步(因此不需要調用同步對象來同步執行)時,最佳實踐是什麼確保相關線程的正確可見性?Java線程可見性 - 沒有顯式同步的最佳可見性實踐
例如:
class B extends Thread {
...
A instanceOfA = ...;
B(){
instanceOfA.registerHandler(new Handler(){
@Override
handle(SomeObjectToBeVisibile o){
...
}
});
}
}
class A extends Thread {
...
void registerSomeHandlerMethod(HandlerMethod handler){...}
void executeHandlers(){
for(each registered handler){
handler.handle(instanceOfSomeObjectToBeVisible);
}
}
}
如果我沒有記錯的話,有一個潛在的可見性問題的處理程序「處理」方法調用傳遞一些構造對象,那麼可能不會顯示在接收有道線程(陳舊的值,例如),對嗎?如果是,如何強制查看而不使用同步?
謝謝。
不要顯式擴展Thread。在圍繞它們開始線程之前,始終創建對象,並且在構建時不會出現多線程問題。 –