当 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);
}
}
}
如果我没记错的话,处理程序“handle”方法调用传递一些构造对象可能存在潜在的可见性问题,这些构造对象可能在接收线程中以正确的方式不可见(例如,陈旧的值),对吧?如果是,如何在不使用同步的情况下强制可见性?
谢谢。