[英]Reordering of code around synchronized blocks
我正在考慮編寫一個看起來像這樣的單例框架:
Object getSingleton(name) {
synchronized(A)
{
o = A.get(name)
if (o != null)
{
while ( ! A.isInitialized(name) )
{
A.wait()
}
return o;
}
o = new Thing();
A.put(o)
A.setInitialized(name, false)
}
o.init()
synchronized(A)
{
A.setInitialized(name, true)
A.notifyAll()
}
return o;
}
關鍵是允許o.init()與可能要調用getSingleton()的其他線程進行交互,而不會導致A上的死鎖。
這將以我想要的方式工作,還是可能相對於同步塊對o.init()進行重新排序? 還是有一種更好的方法呢?
使用Apache.org的LazyInitializer
類 ,聽起來像您需要的一切。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.