[英]Java multithreading concepts in Semaphores
我創建了一個信號量
Semaphore semaphore = new Semaphore(1);
我們已經重載了aquire方法,例如:
aquire()
aquire(int)
問題1:對於當前只有1個許可的信號量,第二種方法( aquire(int)
)有什么意義嗎?
Q2:我還是有點困惑
new Semaphore(int)
new Semaphore(int,true)
new Semaphore(int, false)
Q3:如果我調用release()
而不調用aquire()
,那么許可數量會怎樣,這是否比我們聲明的數量增加?
注意:有多個線程共享Semaphore
對象。
感謝任何幫助。
如果您的Semaphore
以單個許可開始,並且單個線程嘗試獲取多個許可,那么該線程將阻塞。 假設沒有其他線程會調用必要的release
,那么該線程將被無限期地阻塞。
重載構造函數的boolean
參數表示
如果此信號量將保證在爭用條件下先進先出,則為false
您在構造函數中指定的許可數量僅僅是初始數量,而不是限制。
Q2:我還是有點困惑
new Semaphore(int) //same as new Semaphore(i, false);
new Semaphore(int,true) //the Semaphore will be "fair".
new Semaphore(int, false) //the semaphore will not be "fair".
布爾標志控制信號量是否公平 。 “公平”是指當一個以上的線程被阻塞等待獲取許可時,等待的線程將按照嚴格的先到先得順序運行。 要阻塞的第一個線程將是第一個運行的線程,依此類推。
如果信號是不公平的,則可以通過一種算法,可能提供更高的性能相比上一些計算機體系結構的公平算法來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.