【发布时间】:2011-01-25 12:19:13
【问题描述】:
如何通过编写一些代码快速证明以下类不是线程安全的(因为它使用延迟初始化而不使用同步)? 换句话说,如果我正在测试以下类的线程安全性,我怎么会失败呢?
public class LazyInitRace {
private ExpensiveObject instance = null;
public ExpensiveObject getInstance() {
if (instance == null)
instance = new ExpensiveObject();
return instance;
}
}
【问题讨论】:
-
会在构造函数帮助中添加
Thread.sleep吗? -
你有用代码来证明,或者你能用其他方式证明吗?一个简单的执行图可以用来证明它是不安全的。
-
有什么要证明的?这不是线程安全的。
-
同意 Herms,这似乎是一种简单的案例,您甚至不需要“证明”它
-
显而易见并不意味着能够证明它没有价值。线程和线程安全可能很复杂,有时能够证明即使是这样简单的案例也很好,如果只是为了帮助教育那些不熟悉并发问题的人。
标签: java multithreading thread-safety