2012-04-26 53 views
0

我已閱讀關於後臺線程(或工作線程)的教程,現在我在SwingWorker和守護進程線程之間感到困惑,他們是否一樣?如果我正在編寫非GUI應用程序,我應該創建SwingWorker還是守護程序線程,因爲它們都在後臺執行作業?java中的工作者和守護進程線程

回答

1

有兩種類型的Thread s:守護進程和非守護進程。當所有非守護進程Thread停止運行時,JVM將停止執行。

SwingWorker s是一個實用程序,用於從Event Dispatch Thread異步執行一些耗時的任務,以防止GUI無響應。 A SwingWorker不是Thread,它可以是Runnable任務,可以合併爲Thread執行。

如果您沒有對GUI進行任何操作,請使用Thread。如果您需要針對GUI在單獨的Thread上執行操作,請使用SwingWorker

+0

嗨,所以執行提交的Runnable任務的線程是守護進程還是不是? – MinhHoang 2012-04-26 23:35:03

+0

@FinalIllusion如果你調用'SwingWorker#execute',它將在一個守護進程'Thread'上執行。但是,'SwingWorker's在後臺做了很多事情來同步事件派發線程,所以除非你真的爲GUI執行任務,否則你不應該使用它。 – Jeffrey 2012-04-26 23:42:40

+0

謝謝,這就是我想知道的,因爲我不知道如何檢查執行SwingWorker Runnable任務的線程是否是守護進程。 – MinhHoang 2012-04-26 23:47:24

0

SwingWorker是一個專門的類,可以簡化與用戶界面的交互。只能從特殊的gui線程訪問gui組件。 SwingWorker有方法done這是保證在gui線程中執行,所以你可以安全地更新ui。

如果你不與swing ui交互,你應該使用簡單的線程。此外,如果您需要一些線程,請查看ExecutorService這是一個線程池。