假设我有BlockingQueue,并且某些线程被称为take(),但此时队列为空。假设我以某种方式知道未来新元素不会出现在队列中。我如何释放那些被称为take()的线程等待?谢谢!BlockingQueue和释放等待中的线程
public void run() {
//noinspection InfiniteLoopStatement
while (true) {
try {
Thread.sleep(millisecondsToSleep);
if (!kitchen.processedOrdersEmpty()) {
Order processedOrder = kitchen.getFromProcessedOrders();
kitchen.printMessage("took order#" + processedOrder.getOrderNumber());
Thread.sleep(millisecondsToServe);
kitchen.printMessage("served order#" + processedOrder.getOrderNumber());
} else {
int currentRandom = getNextRandom();
if (currentRandom <= 10) {
Order newOrder = new Order(kitchen.getLastOrderNumber());
kitchen.puIntoUnprocessedOrders(newOrder);
kitchen.printMessage("generated new order#" + newOrder.getOrderNumber());
} else {
Thread.sleep(millisecondsToSleep);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
其中kitchen.getFromProcessedOrders()等于:
public Order getFromProcessedOrders() throws InterruptedException {
return processedOrders.take();
}
和processedOrders是BlockingQueue的
你会告诉我们你的代码其中U已经产生的? – DRastislav 2013-04-09 09:56:52
http://stackoverflow.com/questions/5378391/closing-a-blocking-queue – Edmondo1984 2013-04-09 09:58:42
请稍等片刻:) – 2013-04-09 09:59:29