作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以使类的构造函数线程安全吗?不允许使用关键字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/
我是一名优秀的程序员,十分优秀!