当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。在围绕它们开始线程之前,始终创建对象,并且在构建时不会出现多线程问题。 –