如何通过编写一些代码快速证明以下类不是线程安全的(因为它使用Lazy Initialization并且不使用同步)? 换句话说,如果我为了线程安全测试下面的类,我怎么会失败呢?验证以下代码不是线程安全的
public class LazyInitRace {
private ExpensiveObject instance = null;
public ExpensiveObject getInstance() {
if (instance == null)
instance = new ExpensiveObject();
return instance;
}
}
会在构造函数帮助中添加一个'Thread.sleep'吗? – Amarghosh 2010-03-09 16:18:42
您是否*有*使用代码来证明它,或者您能否以其他方式证明它?一个简单的执行图可以用来证明它不安全。 – Herms 2010-03-09 16:20:48
有什么证明?这不是线程安全的。 – ChaosPandion 2010-03-09 16:24:54