gpt4 book ai didi

java - 同步语句上的 NullPointerException

转载 作者:搜寻专家 更新时间:2023-10-30 21:37:34 25 4
gpt4 key购买 nike

我尝试在下面的代码中同步一个对象:

public void myMethod() {
synchronized (globalObj) {
//Do something here
}
}

代码在一个线程中执行。问题是,另一个线程可能会将“globalObj”设置为空。然后,当其他线程将“globalObj”设置为 null 时,“synchronized (globalObj)”将抛出 NullPointerxception。

在对象上进行同步以便不会抛出 NullPointerException 的最佳做法是什么?

谢谢。

最佳答案

您不应该在本身可能会更改的引用上进行同步。如果允许另一个线程替换 globalObj,这意味着您可能持有旧 globalObj 的锁,而另一个线程在完全不同的线程上工作 - 锁没有帮助

您应该做的是为此目的创建一个单独的对象:

static final Object lockObj = new Object();

public void myMethod() {
synchronized (lockObj) {
// do something with globalObj here
}
}

由于 lockObj 永远不会改变,您将始终使用相同的锁 - 没问题。

关于java - 同步语句上的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6433493/

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