我使用了corePoolSize
= maxPoolSize
= queueSize
= 15
在threadpoolexcecutor正在執行的任務的線程池很少線程
每一個傳入的請求產卵7級的任務,一個ThreadPoolExecutor
與此線程池來執行。
即使每個單獨任務在被安排時間不到3秒,整個請求也需要更長的時間。
我懷疑係統沒有排隊的線程和任務。
我記錄了每個傳入請求的以下信息。
getActiveCount()
getLargestPoolSize()
getPoolSize()
getQueue().size()
我注意到系統沒有低於線程。
getPoolSize
and getLargestPoolSize
values is constant at 15 - 這是預期的。
getQueue().size()
始終爲0 - 因此沒有任務正在排隊。
getActiveCount()
值總是在1-2之間。
爲什麼池中的其他線程不工作?
是「getActiveCount()
- 返回正在執行任務的線程的大致數量。」正確的API使用?
這並非完全正確。例如,如果您正在進行緩慢的外部服務,例如其他API,那麼您可以輕鬆支持比可用內核數量多得多的線程。 – Zeki 2011-04-23 17:46:24
是的,我的7個任務實際上是7個外部服務電話。所以我猜,當線程被阻塞在I/O(在我的情況下是網絡)時,它應該處理更多的線程。但似乎不是。 – Ravi 2011-04-24 17:10:42