簡體   English   中英

信號量中的Java多線程概念

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

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