2010-04-22 240 views

回答

1

創建一個生產者和消費者類,它們都是 ,擴展Thread類 實現Runnable接口,並在需要時調用它們。你卡在哪裏?

+4

不是擴展'Thread',而是建議實現'Runnable'或'Callable ',並將'Runnable'封裝在'Thread'中或者使用'Executor'調度'Callable '。 – justkt 2010-04-22 14:17:51

+0

@justkt訣竅:)。雖然我不知道。這是性能問題嗎?爲什麼我們不擴展線程? – Feyyaz 2010-04-22 14:22:49

+3

總的來說,我一直認爲構圖比繼承更受歡迎。具有Thread的一部分的Runnable是組合。擁有一個Thread子類是繼承。這是出於可維護性的目的。從Sun開始[使用]一個Runnable對象,更通用,因爲Runnable對象可以繼承Thread以外的類。「 – justkt 2010-04-22 14:26:27

0
ConcurrentQueue q = new ConcurrentQueue(100); 

ExecutorService service = Executors.newFixedThreadPool(20); 

service.execute(new Producer(q)); 

for (int i=0; i < 18; i++) { 
    service.execute(new Consumer(q)); 
} 

如果雙方ConsumerProducer是擴展了Runnable,並採取Queue作爲其構造函數的參數自定義類。

+0

我想這個問題的多個消費者部分是作爲讀者的練習而留下的? – justkt 2010-04-22 16:13:58

+0

通常在模型中,生產者沒有做任何事情,然後排隊工作請求(非常快的任務),所以只需要一個。另一方面,消費者從隊列中取得工作,然後[可能]執行一些長時間運行的任務,因此需要更多的服務隊列。 – Gandalf 2010-04-22 16:18:26

+0

這是我見過的正常生產者 - 消費者問題,但OP特別提到了多個生產者。 – justkt 2010-04-23 12:43:59