Java中的非同步getter/setter行为
我有一个类作为另一个类的委托Java中的非同步getter/setter行为,java,multithreading,concurrency,synchronization,Java,Multithreading,Concurrency,Synchronization,我有一个类作为另一个类的委托 public class Delegate { private AnotherClass ac; public void delegateCall() { this.ac.actualCall(); } public void setAC(AnotherClass ac) { this.ac = ac; } } 如果我有很多线程调用delegateCall(),而另一个线程调用setAC
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()的线程阻塞的底层同步?不,这里没有任何东西会阻塞。也无法保证“阅读器”线程会看到对
ac
的更改。实际上,这几乎肯定会发生,但不能保证(因为您在这里展示的代码中没有“之前发生”的障碍。当然,这可能适合您的情况。在阅读了任务描述后,我认为您可以假设使用对象池
正如Jon所说,在您的代码中,没有任何东西可以阻止您获得NullPointerException