2015-04-07 117 views
1

的Java多線程的概念我創建了一個信號燈在信號燈

Semaphore semaphore = new Semaphore(1); 

我們已經超負荷AQUIRE方法,如:

aquire() 
aquire(int) 

Q1:對於當前的信號中僅有1許可證,第二種方法(aquire(int))會有什麼意義?

Q2:我還是有點困惑與

new Semaphore(int) 
new Semaphore(int,true) 
new Semaphore(int, false) 

Q3:如果我打電話release(),而不調用aquire(),會發生什麼許可證的數量,這是否增加比我們所擁有的聲明?

注意:有多個線程共享Semaphore對象。

感謝任何幫助。

回答

1

如果您的Semaphore以單個許可證開始並且單個線程試圖獲取多於1個許可證,那麼該線程將被阻止。假設沒有其他線程會調用必要的編號release,那麼該線程將被無限期地阻塞。

boolean參數的overloaded constructor表示

如果此信號量將保證第一下爭 允許先出准許,否則爲假

你在指定的許可數量構造函數只是初始量,而不是限制。

+0

感謝您的回覆,有多個線程共享'Semaphore'對象 –

+3

@SashiKant您在構造函數中指定的許可證數量僅爲初始數量,而非限制。 –

+0

最多爲1您的評論,但我仍然感到困惑與***問題2和3 *** –

1

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". 

布爾標誌控制信號是否是公平。 「公平」意味着當多個線程被阻塞等待獲取許可時,等待的線程將按嚴格的先來先服務順序運行。要阻止的第一個線程將是第一個要運行的線程,依此類推。

當信號量是而不是是公平的,那麼它可以通過一種算法來實現,該算法與某些計算機體系結構上的公平算法相比可能具有更高的性能。

+0

感謝您的輸入,希望有一個選項可以選擇多個正確的答案,而不是選擇一個:) –