亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java線程池問題, 歡迎解答

java線程池問題, 歡迎解答

九州編程 2018-07-16 18:30:00
有上圖可以看出來 , 將線程池的數量設置為 1 和 3 , 完成的時間是差不多的 , 這么什么原因呢 ?
查看完整描述

2 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

處理的內容太少了 看不出消耗 多線程和單線程完全沒什么區別 你里面放個循環 再試試


查看完整回答
反對 回復 2018-07-26
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

問題在于你使用的線程暫存隊列SynchronousQueue。SynchronousQueue是一個無空間的隊列。還有你線程池數量的限制。線程池有兩個數量。核心線程量和總線程量。你說的1和3是核心線程量。10是總線程量。線程任務提交給線程池的流程是首先看是否有空閑的核心線程,如果有就交于核心線程處理。如果沒有就到暫存隊列中等待核心線程釋放。如果暫存隊列也被放滿(現在就是這種情況,SynchronousQueue是一個無空間隊列,你可以理解為一直就是滿的),就會創建臨時線程直接處理溢出的任務。如果臨時線程+核心線程達到了總線程量,而且還有任務提交。線程池就會執行拒絕策略(拒絕策略是可設置且可自定義的。默認的策略的AbortPolicy:丟棄要加入線程池的任務并拋出RejectedExecutionException異常。)。到這里你應該可以明白了為什么時間相隔不打。因為你的線程池執行過程不過是1個核心線程9個臨時線程與3個核心線程7個臨時線程的區別而已。實質上都是10個線程在處理。你可以嘗試使用其他隊列作為線程任務暫存隊列來看看結果。


查看完整回答
反對 回復 2018-07-26
  • 2 回答
  • 0 關注
  • 708 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號