gpt4 book ai didi

java - 如何让构造函数安全?

转载 作者:行者123 更新时间:2023-12-01 11:41:59 25 4
gpt4 key购买 nike

我可以使类的构造函数线程安全吗?不允许使用关键字synchronized?我不想创建一个变量来保护对象的“状态”并检查每个方法..

示例:

    public class Main2 {

static TestClass object;

public static void main(String[] args) {
new Thread() {
public void run() {
object = new TestClass();
};
}.start();

new Thread() {
public void run() {
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
object.printValue();
}
}.start();
}
}



class TestClass {

private int value;

public TestClass() {
System.out.println("Start Constructor");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Finished Constructor");

this.value = 5;
}

public void printValue() {
System.out.println("Value: \"" + this.value + "\"");
}
}

输出:

Start Constructor
Exception in thread "Thread-1" java.lang.NullPointerException
at Main2$2.run(Main2.java:19)
Finished Constructor

有什么想法吗?

最佳答案

这与对象内的线程安全无关。在您访问该对象之前,不会创建该对象。

您只是访问一个空对象。一个简单的空检查就可以解决问题。

关于java - 如何让构造函数安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29450705/

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