[英]Java : Semaphore: Producer Consumer: Threads and ThreadGroup
我為生產者和消費者實現了一個信號量類。
一切正常,但是我現在感覺我們使用notifyAll來通知喚醒或通知所有線程的線程。
我想知道是否可以通過某種方式僅通知一組特定的組:就像生產者僅使用組或其他任何方式通知使用者線程,反之亦然。
PS:我是Java和Threading的新手。
在我看來,就像您在重新發明輪子。 信號量在java.util.concurrent
包中可用。
此外,對於生產者/消費者數據結構,建議您只使用BlockingQueue
。
無論如何, notify
方法會通知一個(未指定)服務員。 如果您確實需要允許通過的特定“命令”,我相信您將必須要通知notifyAll
並“手動”確保只有相關的命令才能獲取該信號量。
對於您的特殊情況,在我看來,您需要一個等待生產者的等待時間,一個等待消費者的等待時間。 由於每個對象設置了一個等待集,因此不可能僅通知使用一個對象的使用者(或生產者)。 也許您所擁有的是兩個對象,一個對象被生產者獲取,一個對象被消費者獲取,然后執行consumerObj.notifyAll()
或producerObj.notifyAll()
,這取決於要喚醒的線程組。
Thread arr [] = new Thread[10];
ThreadGroup group = new ThreadGroup("test");
group.enumerate(arr);
group.notifyAll();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.