java 线程池 固定大小_使用Executors服务在Java中创建固定大小线程池的最佳方法...
查看源代碼,您將意識到:
Executors.newFixedThreadPool(threadPoolSize);
相當于:
return new ThreadPoolExecutor(threadPoolSize, threadPoolSize, 0L, MILLISECONDS,
new LinkedBlockingQueue());
由于它不提供顯式的RejectedExecutionHandler,因此使用默認的AbortPolicy.一旦隊列滿了,它基本上會拋出RejectedExecutionException.但是隊列是無限的,因此永遠不會滿員.因此,這個執行器接受數量的任務.
你的聲明要復雜得多,而且完全不同:
> new LinkedBlockingQueue< Runnable>(10000)將導致線程池在等待超過10000的任務時丟棄任務.
>我不明白你的RejectedExecutionHandler在做什么.如果池發現它不能再將任何runnables放入隊列,它會調用你的處理程序.在這個處理程序中,你…嘗試將Runnable再次放入隊列(這將在99%的情況下失敗).最后你吞下了這個例外.看起來像ThreadPoolExecutor.DiscardPolicy就是你所追求的.
如果任務隊列太大,看下面的評論似乎是你試圖阻止或以某種方式限制客戶端.我不認為在RejectedExecutionHandler中阻塞是個好主意.而是考慮CallerRunsPolicy拒絕策略.不完全相同,但足夠接近.
總結:如果你想限制掛起任務的數量,你的方法幾乎是好的.如果你想限制并發線程的數量,第一個單線程就足夠了.
1 – 假設2 ^ 31是無窮大
總結
以上是生活随笔為你收集整理的java 线程池 固定大小_使用Executors服务在Java中创建固定大小线程池的最佳方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 9月份红帽认证考试又 PASS 19位同
- 下一篇: java)_Java NIO系列教程(一