簡體   English   中英

在java中使用信號量並存儲到數組中

[英]Using Semaphores in java and storing into array

我是使用信號量的新手,所以請耐心等待。 所以,假設我有 7 個許可證要發放,總共有 49 個人(線程)在等待它們。 如果我獲取()前 7 個人的信號量並將它們存儲到列表數組中(存儲人的信號量),例如通過將它們傳遞到另一個類。 然后,如果我回到該數組並循環並釋放()該其他類中的信號量,那不應該觸發其他線程等待獲取下一個鍵嗎? 因為我剛剛編寫的代碼做到了這一點,接下來的 7 個線程沒有獲取密鑰。 我沒有發布代碼,因為我只是想從概念上了解我錯過了什么,然后實現它。

如果您想要一次最多有 7 個線程處於活動狀態,則只需要 1 個信號量,如下所示:

Semaphore available = new Semaphore(7, true);

讓您的每一個線程呼叫available.acquire()(最終available.release()),對這個非常旗語實例(由所有線程共享),那就是它。

這是 java.util.concurrent.Semaphore javadoc 所說的:

計數信號量。 從概念上講,信號量維護一組許可。 如有必要,每個acquire() 都會阻塞,直到獲得許可為止,然后獲取它。 每個 release() 添加一個許可,可能會釋放一個阻塞的獲取者。 但是,沒有使用實際的許可對象; 信號量只是計算可用的數量並相應地采取行動。

如果您正在獲取信號量,請務必在某個時候釋放它。 前偽代碼:

sem = Semaphore.new(2, true)
Thread1 { 
    sem.acquire()
    // Do something
    sem.release()
    }; 
Thread2 { 
    sem.acquire()
    // Do something
    sem.release()
    }
Thread3 { 
    //blocked until one of the first two Thread releases. 
    sem.acquire()
    // Do something
    sem.release()
    }

這增加了齊柏林飛艇的觀點......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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