2012-04-26 30 views
0

私はバックグラウンドスレッド(またはワーカースレッド)に関するチュートリアルを読んでいますが、今はSwingWorkerとデーモンスレッドの間で混乱します。もし私がGUI以外のアプリケーションを書いているのであれば、両方ともバックグラウンドで仕事をしているのでSwingWorkerやデーモンのスレッドを作るべきですか?javaのワーカーとデーモンのスレッド

答えて

1

Threadにはデーモンとデーモン以外の2種類があります。デーモンでないデーモンThreadがすべて停止すると、JVMは実行を停止します。

SwingWorkerは、GUIが応答しなくなるのを防ぐために、イベントディスパッチスレッドから時間のかかる高価なタスクを非同期に実行するためのユーティリティです。 SwingWorkerThreadではありません。実行のためにThreadに陥れる可能性があるRunnableタスクです。

GUIで何もしていない場合は、Threadを使用してください。 GUI用に個別のThreadでアクションを実行する必要がある場合は、SwingWorkerを使用してください。

+0

こんにちは、送信されたRunnableタスクを実行するスレッドはデーモンかどうかですか? – MinhHoang

+0

@FinalIllusion 'SwingWorker#execute'を呼び出すと、デーモン' Thread'で実行されます。しかし、SwingWorkerはバックグラウンドでEvent Dispatch Threadと同期するために多くの作業を行います。実際にGUI用のタスクを実行している場合を除き、使用しないでください。 – Jeffrey

+0

ありがとう、それは私がSwingWorker Runnableタスクを実行しているスレッドがデーモンであるかどうかをチェックする方法を知らないので、私が知りたいことです。 – MinhHoang

0

SwingWorkerは、ユーザーインターフェイスとのやり取りを容易にする特殊なクラスです。 GUIコンポーネントへのアクセスは特別なGUIスレッドからのみ行う必要があります。 SwingWorkerにはguiスレッドで実行することが保証されているメソッドdoneがありますので、安全にuiを更新することができます。

スイングUIとやり取りしない場合は、単純なスレッドを使用する必要があります。さらに、いくつかのスレッドが必要な場合は、ExecutorServiceを参照することをお勧めします。これはスレッドプールです。

関連する問題