Java スレッドが相互に通信しているが、明示的な同期が必要ない (実行を同期するためにオブジェクトで synchronize を呼び出す必要がない) 場合、関連するスレッド間で適切な可視性を確保するためのベスト プラクティスは何ですか?
例えば:
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);
}
}
}
私が間違っていなければ、受信スレッドで適切な方法で表示されない可能性がある構築されたオブジェクトを渡すハンドラーの「ハンドル」メソッド呼び出しに可視性の問題が発生する可能性があります (古い値など)。はいの場合、同期を使用せずに可視性を強制する方法は?
ありがとう。