Java併發API爲您提供了Executor
和ExecutorService
接口來構建並附帶幾個具體實現(ThreadPoolExecutor
和ScheduledThreadPoolExecutor
)。Java併發性:如何選擇和配置執行程序
我完全不熟悉Java併發性,並且很難找到幾個非常類似的問題的答案。而不是與所有這些微小的問題,以便塞滿我決定把他們捆綁在一起,因爲可能有一種方法來回答他們一舉(可能是因爲我沒有在這裏看到整個畫面):
- 是它通常的做法是實施你自己的
Executor
/ExecutorService
?在什麼情況下你會這樣做,而不是使用上面提到的兩個結論?在什麼情況下,這兩個結論比「本土」更適合? - 我不明白所有併發集合如何與
Executor
相關。舉例來說,ThreadPoolExecutor
是否使用引擎蓋下的ConcurrentLinkedQueue
來排隊提交的任務?或者你(API開發者)是否應該在你的並行化的run()
方法中選擇和使用ConcurrentLinkedQueue
? Basicaly,是那些在Executor
內部使用的併發集合,還是用它們來幫助編寫非阻塞算法? - 您可以配置
Executor
在底層使用哪些併發集合(用於存儲提交的任務),這是否是常用操作?
在此先感謝!
感謝@Gray(+1) - 所以總結一下,我會一直使用'ThreadPoolExecutor'或'ScheduledPoolExecutor'和* only *時間來使用併發集合,當我使用它時創建這兩種類型的新實例?作爲我的非阻塞算法的一部分,沒有理由在我的run()方法中出現'BlockingQueue',是的?只是想確定我完全理解! – IAmYourFaja
是的執行者。我一直使用併發集合來在線程之間進行通信,但您不必擔心與執行程序服務有關的問題。在run()方法中沒有任何理由引用'Runnable'阻塞隊列。 – Gray
看到我的例子在這裏設置拒絕處理程序。這引用隊列,但再次,不在'run()'方法:http://stackoverflow.com/questions/11249342/creating-a-dynamic-growing-shrinking-thread-pool-in-java/11249485#11249485 – Gray