0
我有一個java.util.BlockingQueue
這是POJOs的需要由ExecutorService
服務。該隊列必須由單個線程提供服務,但會一次從多個線程推送。Mullti生產者單消費者執行者服務設計
在過去,我已經寫了我的解決方案看起來有點像,但我真的很鄙視它:
executorService.execute(new Runnable() {
@Override
public void run() {
while (true) {
try {
POJO job = blockingQueue.take();
servicePOJO(job);
} catch (InterruptedException e) {
break;
}
}
}
});
有沒有寫這更好的辦法,或這是最佳方式正在做?我不喜歡這樣做的原因是因爲如果我需要添加多個消費者,我需要在實際線程池的大小的循環中運行上面的代碼。
你爲什麼不簡單地使用單線程執行程序? – sarcan 2012-08-10 23:50:41
這裏不清楚'ExecutorService'的意義,除了看起來你沒有創建一個專門服務這個隊列的線程。你當然是在竊取一個線程來執行這個操作,並且它不符合'ExecutorService'的預期用法。另外,當你通過調用Thread.currentThread()。interrupt()'傳播中斷時,你在這裏吞下'InterruptedException'。 – seh 2012-08-11 00:26:09