簡體   English   中英

Java Swingworker和多線程

[英]Java Swingworker and multiple threads

我正在設計一個Java GUI驅動的應用程序,該應用程序運行許多單獨的任務,每個任務都在自己的SwingWorker擴展類中。 這是我使用的正常設計,以便在自己的線程上運行任務,並且仍然可以讓EDT免費更新GUI。 每個SwingWorker都使用Executors.newCachedThreadPool在自己的線程上啟動。

但是,在一個特定的類中,有一個任務需要相當長的時間來處理。 該任務包含一個for循環,最多可執行六次計算。

我已經考慮過在自己的線程中實現六個計算中的每一個以加快處理時間,但我不確定實現它的最佳方法。

是否可以擴展SwingWorker並實現Runnable,然后在for循環中使用void Run()方法,每次啟動一個新的Thread,或者使用cachedThreadPool。

或者我最好只使用標准的Thread()實現?

任何建議或意見將不勝感激。

提前致謝

玩笑

user988052當然是正確的 - 如果你沒有多核CPU,那么在六個不同線程中進行計算實際上會減慢你的應用程序,因為線程的創建和管理帶來了開銷。

如果你想在六個獨立的線程中進行這種計算,你可以使用SwingWorker作為管理線程,並在其中產生5-6個新線程。 然后使用ExecutorService就可以了,因為它使用了一個線程池,從而最大限度地減少了創建和處理線程所帶來的開銷。

編輯:回答你的評論:

我認為最好的方法是在Runnable實現計算(以便六個計算中的每一個可以單獨運行),然后只需使用ExecutorService ,實例化Runnable六次並使用ExecutorService.submit(Runnable task) 您可以在SwingWorker.doInBackground()方法中完成所有這些操作。

你永遠不應該自己調用run()方法 - 讓它由Thread / ExecutorService完成。

暫無
暫無

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

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