簡體   English   中英

Java:設計用於使用許多執行程序服務和僅幾個線程

[英]Java: design for using many executors services and only few threads

我需要並行運行多個線程來執行一些測試。

我的“測試引擎”將執行n個測試,每個測試執行k個子測試。 存儲每個測試結果以供以后使用。

因此,我有可以同時運行的n * k個進程。

我試圖弄清楚如何有效地使用Java並發工具。

現在,我在測試級別有一個執行程序服務,在子測試級別有n個執行程序服務。

我為測試級別創建了可調用對象列表。 然后,每個可調用的測試將為子測試級別創建另一個可調用的列表。 當調用測試可調用對象時,它將隨后調用所有子測試可調用對象

  • 測試1
    • 子測試a1
    • 子測驗... 1
    • 子測試k1
  • 測試n
    • 子測驗a2
    • 子測驗... 2
    • 子測驗k2

通話順序:

  • 測試經理創建可調用的測試1
    • test1可調用的創建子測試a1到k1
    • testn可調用創建子測試an到kn
  • 測試經理調用所有測試可調用項
    • 可調用的test1調用所有子測試a1到k1
    • testn可調用調用所有子測試an到kn

這工作正常,但我創建了許多新的功能。

我無法共享執行器服務,因為我需要在執行器上調用“關機”。

解決此問題的想法是為每個執行程序服務提供相同的固定大小的線程池。

您認為這是一個好的設計嗎? 我會錯過一些更合適/更簡單的方法嗎?

使用單個固定線程池執行程序。 避免調用shutdown,否則可能會出錯。

這是一些偽代碼,我可以根據所發布的少量信息對您的需求進行最佳猜測。

main () {
    ArrayList<Future<?>> futures = new ArrayList<Future<?>>();
    ExecutorService exec = Executors.newFixedThreadPool(Runtime.getNumProcessors())
    futures.add(exec.submit(Test1));
    ...
    futures.add(exec.submit(Testn));

    for (Future<?> future:futures) {
       ? result = future.get();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM