2011-03-09 43 views
0

我們有一個ThreadPoolExecutor,它將任務從隊列中拉出以供執行。對於給定類型的對象,例如。用戶,我們可以在不同實例之間進行並行操作。但是,單個實例的操作必須按順序進行。對ThreadPool執行程序中特定對象的排序操作

由於線程調度的原因,線程池無法保證這一點,因爲可以按非確定性順序連續插入兩個項目。我沒有看到一種方法來完成這是標準的Java庫。是否有提供此功能的第三方解決方案?

我們可以自己實現,但這是一個相當複雜的問題,我寧願在這一點上採用強化的解決方案。

感謝

回答

0

您可以創建爲每個對象隊列,並添加任務到ThreadPoolExecutor的執行該對象的下一個任務。爲確保任務不會在對象上同時執行,您可以在執行此操作時鎖定對象或隊列。

1

怎麼樣創建你的ThreadPoolExecutorPriorityBlockingQueue。 「優先級」可以被定義爲一個比較器,它可以通過實例id來區分,或者可以將類似項目分組。