如何运用TDD来开发线程安全的代码?例如,我有一个工厂方法,它使用延迟初始化创建一个类的实例,并在此之后返回它:
private TextLineEncoder textLineEncoder;
...
public ProtocolEncoder getEncoder() throws Exception {
if(textLineEncoder == null)
textLineEncoder = new TextLineEncoder();
return textLineEncoder;
}
现在,我想以良好的TDD风格编写一个测试,强制使这段代码具有线程安全性。具体来说,当两个线程同时调用此方法时,我不希望创建两个实例并且仅丢弃其中的一个。虽然很容易实现,但如何编写一个测试来引导我完成它呢?
我是在Java中提问,但答案应该更广泛适用。