2012-10-12 232 views
1

java中的Synchronized關鍵字取決於互斥鎖還是信號量?我讀到這兩個術語可以互換使用,但是有區別嗎? java中有沒有內建信號量類?JAVA中的互斥量和信號量?

+1

互斥體來自互斥 - 唯一的線程訪問代碼塊,而信號量允許多個線程執行代碼。有時允許多個線程輸入代碼塊會很有用。 java.util.concurrent.Semaphore - 信號量,synchronized更接近互斥量。 – user486075

+0

'synchronized'取決於一個對象或類,它充當互斥體。有什麼內置什麼...? – nullpotent

+0

@ user486075它來自互斥。 – nullpotent

回答

1

一個mutexsemaphore之間的主要區別在於,mutex可由進程/線程,其保持它在對比的是可以通過任何進程/線程被釋放semaphore僅釋放。還有一個區別,但不是那麼重要:有一種叫做計數信號量的信號量,即可以初始化以允許多個併發「持有者」的信號量。

​​在語義上的訪問應該使用mutex實現。

0

旗語一個封裝具有在運行的一個塊釋放,它可以被獲取許可證/固定數量的碼。所以等於許可證數量的固定數量的線程可以同時運行代碼塊。互斥/鎖是信號量的專用版本,其中許可數量爲1.只允許單個線程運行某個代碼塊。這給了代碼塊的線程「所有權」。只有所有者才能獲取並釋放代碼塊上的鎖定。