我有幾個可疑的查詢一些JMX豆,所以每個人都可能會超時。我想輪詢值可以說每秒。最天真的方法是在一個單獨的線程中啓動每個線程,但我想盡量減少線程的數量。我有哪些選擇需要以更好的方式來完成?調度可能會在投票情況下超時的最佳方法是什麼?
0
A
回答
1
我的解釋是,你有一堆Callable對象需要在一定的時間間隔進行輪詢。如果您使用線程池,麻煩的是該池將被最慢的成員所污染,並且更快的成員將被餓死。
聽起來你可以控制調度,所以你可能會考慮一種指數退避的方法。也就是說,在Callable X運行(也許超時)之後,您需要等待2秒而不是1秒鐘,然後重新安排它。如果它仍然失敗,請轉到4s,然後是8s等。如果您使用ScheduledThreadPoolExecutor,則它具有內置的方法來執行此操作,從而允許您在一段延遲後安排執行。
如果你設置了一個恆定的超時時間,這個策略將減少你的池對於慢速池的壟斷的敏感度。完全擺脫這個問題是非常困難的。正如你所說,爲每個查詢對象使用單獨的線程確實是確保您不會餓死的唯一方法,並且這可能非常耗費資源。
另一種策略是把你的游泳池變成一個快一個慢一個。如果一個對象超時(比如超過N次),則將其移動到慢速緩衝池。這可以讓你的快速游泳池保持快速,而慢速的游泳池則可以相互阻擋,至少它們不會堵塞快速游泳池。如果他們有一段時間有很好的統計數據,你可以再次將他們提升到快速池。
0
只要您submit
a Callable
您收到Future
- 處理未來的結果。您可以決定等待其完成一段時間:
Future<String> future = executorService.submit(callable);
try {
future.get(1, TimeUnit.SECONDS);
} catch (TimeoutException e) {
future.cancel(true);
} catch ...
使用超時調用可讓您在任務尚未完成時收到異常。這不區分未開始的任務和已開始但未完成的任務。另一方面,cancel
將採用布爾參數mayStopIfRunning
,因此您可以選擇只取消尚未安排的任務。
0
我同意robbotic ......實施「cachedThreadPool」將解決你的問題,因爲這將線程數限制在同一時間的最佳水平有這將釋放你的未利用的資源超時
相關問題
- 1. 「投票」的最佳方式是什麼?
- 2. 最佳情況和最壞情況下的時間複雜度
- 3. 什麼是限制我們網站投票的最佳方式?
- 4. 在什麼情況/情況下,dynamic_cast <>可能會失敗?
- 5. 在我的情況下減少sql查詢的最佳方法是什麼
- 6. 在我的情況下,從epoll中刪除fd的最佳方法是什麼?
- 7. 最壞的情況會是什麼時間複雜度?
- 8. 在什麼情況下是可測試的方法
- 9. 在以下情況下與git協作的最佳做法是什麼?
- 10. 處理會話超時的最佳方式是什麼?
- 11. 在這種情況下,有什麼可以替代普通投票?
- 12. 在不等待的情況下調用異步方法時會發生什麼?
- 13. 什麼是在struts2中處理會話超時的最佳方法
- 14. 什麼是投票表的最佳索引?
- 15. 微調性能時,多次調用JavaScript方法的最佳方式是什麼?
- 16. 這種情況下的最佳實踐是什麼 - jQuery&CSS?
- 17. 爲什麼在以下情況下會丟失方法?
- 18. 在我的情況下注冊新用戶的最佳做法是什麼?
- 19. 如何在沒有投票權的情況下在Rails中實現投票
- 20. 爲什麼在這種情況下超時變量可共享?
- 21. 在不創建空白的情況下按比例調整圖像大小的最佳方法是什麼?
- 22. 在不降低視頻質量的情況下調整FLV大小的最佳方法是什麼?
- 23. Plone 4中的最佳任務調度方法是什麼?
- 24. 在這些情況下隱藏的GCC可見度是什麼?
- 25. 在什麼情況下會使用IPP AggCat中的discoverAndAddAccountsResponse方法?
- 26. 在什麼情況下,memcached可能會遇到分配失敗
- 27. 這種情況下最好的情況是什麼?
- 28. 調試性能問題的最佳方法是什麼?
- 29. 在什麼情況下調用ELResolver的setValue方法?
- 30. 使用jQuery,設置投票系統的最佳方式是什麼?