我想調一個線程,其執行以下操作:的ThreadPoolExecutor - ArrayBlockingQueue ...等待它刪除的元素之前形成隊列
線程池只有1線程[CorePoolSize =0, maxPoolSize = 1]
隊列使用是一個ArrayBlockingQueue
Quesize = 20
背景:
線程嘗試讀取請求並對其執行操作。然而,最終的請求增加了很多,線程總是很忙,並且消耗1個CPU,這使得它成爲一個資源管理器。
我想這樣做,而是在間隔中對請求進行採樣並處理它們。其他請求可以安全地忽略。
我所要做的就是在「操作」函數中進行睡眠,以便線程每次睡眠一段時間並釋放CPU。
Quesiton:
不過,我想知道是否有使用基本上自身休眠它讀取下一個元素之前的某個時候隊列的方式。這將是理想的,因爲在執行過程中休眠任務並保持執行不完整對我來說聽起來並不合適。
請讓我知道如果您有任何其他建議以及對任務
感謝。
編輯: 我添加了一個後續問題here 糾正maxpool大小爲1 [寫在一個急速] ..感謝蒂姆指出。
這不是一個真正的「資源豬」,有很多工作要做。你真的想要人爲地減緩請求嗎?爲什麼請求(客戶端?)發送得比他們可以處理的速度快?這是不可持續的。 – AngerClown 2010-10-05 00:19:26
好點。如果客戶發出很多因完整隊列而被拒絕的請求,那麼他們正在浪費可能在客戶端和執行程序之間更好地平衡的CPU。隊列是一個緩衝區,可以隨時間「平滑」負載;拒絕應該是罕見的,不是常規的。 – erickson 2010-10-05 00:27:23
客戶不是真正意義上的請求者的專用客戶端。請求者有一個專用客戶端,根據請求的數量進行擴展。我正在工作的客戶端就像是一個額外的日誌記錄工具,監控操作類型..採樣仍然很好,以獲取請求圖片..希望是有道理的。 – codeObserver 2010-10-05 00:55:44