我有一个课程,作为另一个人的代表。
public class Delegate {
private AnotherClass ac;
public void delegateCall() {
this.ac.actualCall();
}
public void setAC(AnotherClass ac) {
this.ac = ac;
}
}
如果我有很多线程调用delegateCall()
而另一个线程调用setAC()
,会有什么后果?我的假设是调用delegateCall()
的某些线程在设置之前可以访问ac实例,并且有些线程在设置之后可以访问它。在我的特定应用程序中,每个线程获得哪个实例并不重要。
我的问题:JVM中是否存在可能导致调用delegateCall()的线程阻塞的基础同步?
答案 0 :(得分:3)
不,这里没有任何阻碍。也没有什么可以保证“读者”线程永远看到对ac
的更改。实际上它几乎肯定会,但它不能保证(因为你在这里展示的代码中没有“先发生过”的障碍。当然,这对你的情况来说可能是好的。
答案 1 :(得分:0)
在阅读完任务说明后,我认为您假设使用Objects Pool
会感兴趣。
在你的代码中,正如Jon所说,没有什么能阻止你获得NullPointerException。