簡體   English   中英

對同步塊周圍的代碼重新排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM