我有一個ThreadPoolExecutor是用一個無界隊列(LinkedBlockingQueue)和一個核心和最大池大小設置爲cpus數(比如說4)構造的。我不明白這個ThreadPoolExecutor行爲
每當我得到一個RejectedExecutionException異常。執行器處於運行狀態。我的理解是,這不應該發生在無邊界的隊列中。
我一直沒有能夠在調試器中看到發生了什麼,但是從堆棧跟蹤看起來像在ThreadPoolExecutor.execute中,workQueue.offer返回false,所以它跳轉到位它試圖啓動一個新的線程。但是poolSize已經在最大值,所以它會拋出被拒絕的執行異常。
我不太明白這一點。
但是無論如何,我是否應該使最大池大小比核心池大小大一點?
看看這個優秀的答案,並upvote它:http://stackoverflow.com/questions/1800317/impossible-to-make-a-cached-thread-pool-with-a-size-limit/1800583# 1800583 –
這個答案只是證實@deliciousirony看到的行爲不應該發生。 – Thilo
你可以發表一些代碼嗎? – jiggy