1) 테이크은()
2를 실행하는 스레드를 중단 할 수 있습니다)입니다 : kitchen.getFromProcessedOrders() 동일이
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();
}
}
}
특수 객체를 끝의 신호로 대기열에 넣을 수 있습니다. 스레드가 특수 오브젝트 (END)를 얻으면 스레드를 다시 넣고 종료하므로 대기중인 다른 스레드도 END를 얻습니다.
당신이 우리에게 u는 이미 만들어진 코드를 보여줄 것인가를? – DRastislav
http://stackoverflow.com/questions/5378391/closing-a-blocking-queue – Edmondo1984
잠시만 기다려주십시오 :) –