2010-10-15 297 views
11

我無法從javadocs中的信號量描述中理解以下內容。信號量和同步

注意,沒有同步鎖是 舉行時獲取()被調用爲 會阻止 返回到池中的項目。 信號量 封裝了從保持 池本身的一致性所需的任何同步 分別限制訪問池, 所需的同步 。

有人可以幫助我瞭解這一點及其影響。

回答

11

信號量充當可用資源池深度的限制器;例如,一個容量爲10的信號量允許最多10個線程立即獲取它,並且試圖獲取它的任何其他線程都會阻塞,直到其他線程釋放它爲止。

這與普通的互斥或監視器鎖定有些不同,它通常用於防止多個線程同時修改相同的變量並導致不一致的結果或程序狀態。

例如,考慮一個連接池,其連接限制爲10個。每個需要連接的線程都會在連接使用期間獲取信號(這可以防止太多的線程同時請求連接),但是當從內部連接時,池對象也必須使用synchronized塊或方法收集或放回,以防止丟失跟蹤連接或錯誤地將同一連接交給兩個不同的線程,因爲他們同時詢問。

+3

確實是一個很好的解釋。 +1 – 2010-10-15 03:53:06