25

重複の可能性:
Javaのデーモンスレッドとは何
ですか?デーモンスレッドはいつ役に立ちますか?

Javaのユーザースレッドとデーモンスレッドの違いと混同しています。

教えて頂けますか:

  1. Javaのユーザースレッドとデーモンスレッドの違いは何ですか?
  2. どのような状況でデーモンスレッドが使用されますか?例を挙げていただけますか?
4

3 に答える 3

24

最後の非jvmスレッドが終了すると、JVMは終了します。これは、作成したスレッドのいずれかがまだ実行中の場合、jvmがシャットダウンしないことを意味します。デーモンスレッドは、JVMのシャットダウンを妨げないスレッドです。通常、ユーザーがアプリケーションのシャットダウンを要求した場合にアプリケーションを稼働させたくないバックグラウンドタスクにこれらを使用します。

また、あなたの質問はすでにここで尋ねられました(そして答えられました)-Javaのデーモンスレッドとは何ですか?

デーモンスレッドのいくつかの一般的な(個人的な経験からの)ユースケースには、次のものが含まれる場合があります

  • ステータスの変更についてリモートシステムをポーリングするバックグラウンドスレッド
  • バックグラウンド作業スレッド(電子メール通知、SNMPなどの送信など)
  • スケジュールされたメンテナンスを実行するためのカスタムタイマースレッド
于 2013-01-11T06:28:50.130 に答える
5

2番目の質問:

すべての通常のスレッドが終了すると、デーモンスレッドは自動的に終了します。

デーモンスレッドを使用して、アプリケーションでハウスキーピングまたはクリーニングを実行できます。デーモンスレッドはバックグラウンドサポートタスクに使用され、通常のスレッドの実行中にのみ必要です。GCスレッドはデーモンスレッドです。

于 2013-01-11T06:45:50.683 に答える
2

ユーザースレッドは、アプリケーション(ユーザー)によって作成されるスレッドであり、ほとんどの場合、デーモンスレッドは、ユーザースレッドにサービスを提供するためにJavaVMによって作成されます。VMは、ユーザースレッドが終了するときに、ユーザースレッドまたはデーモンスレッドを区別します。ユーザースレッドが終了した場合、VMは、実行中の他のユーザースレッドがあるかどうかを確認します。ある場合は、次のスレッド(ユーザーまたはデーモン)をスケジュールします。他のユーザースレッドが実行されておらず、デーモンスレッドのみが実行されている場合、VMのそのインスタンスも終了します。

これら2種類のスレッドの違いは簡単です。アプリケーションで実行されているスレッドがデーモンスレッドのみであるとJavaランタイムが判断した場合(つまり、ユーザースレッドが存在しない場合)、Javaランタイムはアプリケーションを即座に閉じ、すべてを効果的に停止します。デーモンスレッドがトラックで停止しています。アプリケーションが実行を継続するには、常に少なくとも1つのライブユーザースレッドが必要です。他のすべての点で、Javaランタイムはデーモンスレッドとユーザースレッドをまったく同じ方法で扱います。

于 2013-01-11T06:46:51.117 に答える