gpt4 book ai didi

java - 在空对象上使用 Synchronized 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 11:24:38 27 4
gpt4 key购买 nike

我看过这个NullPointerException on synchronized statement .

代码:

synchronized(a){
a = new A()
}

所以根据上面的答案我知道不可能在空引用上使用synchronized关键字

所以我将代码更改为:

synchronized(a = new A()){}

但不确定这是否与我的原始代码相同?

更新:

我想要实现的是锁定a的创建(a = new A())

最佳答案

同步需要一个提供锁定机制的对象。可以是任何对象(事实上,不带参数的synchronized会在this上同步),但Java API提供了专门用于此功能的类,例如ReentrantLock .

在代码中,您提供的对包含同步块(synchronized block)的函数的每次调用都将使用不同的对象进行锁定,从而有效地使同步变得无用。

编辑:既然您用您实际想要完成的任务更新了您的帖子,我可以为您提供更多帮助。

public class Creator {
private A a;

public void createA() {
synchronized(this) {
a = new A();
}
}
}

我不知道这是否适合您的设计,因为您提供的代码示例非常小,但您应该明白。这里 Creator 类的实例用于同步 A 的创建。如果您在多个线程之间共享它,每个线程都调用 createA(),您可以确保一个实例化过程将在另一个实例化过程开始之前完成。

关于java - 在空对象上使用 Synchronized 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30931336/

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