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