gpt4 book ai didi

java - java中的空检查和监听器

转载 作者:太空狗 更新时间:2023-10-29 15:54:08 25 4
gpt4 key购买 nike

我经常看到这样的代码:

Listener mListener;

public void setListener(Listener listener){
mListener=listener;
}

public void fooFunction(){
...
...
if (mListener!=null){
mListener.notifyFoo();
}
}

我的问题是:如果在 null 检查和 notifyFoo() 之间另一个线程调用 setListener(null) 怎么办?那可能吗?还是编译器让它成为原子的

最佳答案

可以同步方法

public synchronized void setListener(Listener listener){
mListener=listener;
}

public synchronized void fooFunction(){
...
...
if (mListener!=null){
mListener.notifyFoo();
}
}

或者如果你想要更好的锁粒度

private Object monitor = new Object();

public void setListener(Listener listener){
synchronized (monitor) {
mListener=listener;
}
}

public void fooFunction(){
...
...
synchronized (monitor) {
if (mListener!=null){
mListener.notifyFoo();
}
}
}

关于java - java中的空检查和监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com