我在尋找ExecutorService
,它可根據需要創建線程,達到預定義的限制並在保持活動時間後銷燬空閒線程。按需線程數有限的執行程序
下面的構造函數創建一個ThreadPoolExecutor
固定線程數:
// taken from Executors.newFixedThreadPool()
new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
所以我試圖創建一個ExecutorService
這樣:
// taken from Executors.newCachedThreadPool()
new ThreadPoolExecutor(0, nThreads,
CACHED_POOL_SHUTDOWN_DELAY, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());
但它不工作不如預期,當nThreads
正在使用中,Executor
不排隊新任務,但拋出RejectedExecutionException
。我知道我可以實現一個處理程序,但它並沒有幫助我。
如何創建前面所述的Executor
?
謝謝,你說得對。但可能會發生成千上萬的排隊隊列,我不想創建如此龐大的隊列。 – Stephan
@Stephan您需要對無法運行的任務(使用最大池大小)進行操作並且無法入隊(隊列已滿)...您可以限制隊列的大小,但您將收到一旦它已滿,就會發生異常。 – assylias
這是真的。我從隊列的構造函數中刪除了'capacity'參數,因此它被設置爲'Integer.MAX_VALUE'。 – Stephan