ホームページ >Java >&#&チュートリアル >Javaのデーモンスレッド

Javaのデーモンスレッド

WBOY
WBOYオリジナル
2024-08-30 16:03:14498ブラウズ

Java のデーモン スレッドは、優先度が最も低く、スレッドにサービスを提供するために使用され、さらにバックグラウンド タスクの実行にも使用されます。バックグラウンドでのタスクの実行には、ガベージ コレクションや、終了後に同時に実行されるのを防ぐために JVM が関与するその他の多くのタスクが含まれます。 Java 仮想マシンは、実際にはデーモン スレッドではない他のユーザー スレッドを見つけると、それ自体を終了します。 Java 仮想マシンがデーモン スレッドを見つけた場合、まずそのスレッドを終了し、その後、Java 仮想マシン自体がシャットダウンされます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文

デーモン スレッドに特定の構文はありませんが、デーモン スレッドの一部として他のメソッドによって作成および呼び出すことができます。

として表されます。
public class DaemonThread extends Thread
  • public class: クラスのアクセス修飾子は public であり、
  • DaemonThread: スレッドのタイプは DaemonThread であるため、Thread クラスから継承および拡張されます。
  • スレッド: スレッド クラスは、Thread クラスのプロパティをデーモン スレッドに継承するために使用されます。

さらに、デーモン スレッドを呼び出すための構文が異なるさまざまなメソッドが関係します。

public final void setDaemon(boolean on)

このメソッド構文は、デーモン スレッドが true を意味するブール値 on としてマークされている場合、スレッドはデーモン スレッドであるため、パラメーターをブール値 on として渡します。

public final boolean isDaemon()

このメソッドは、見つかったスレッドがデーモン スレッドの場合は true を返し、見つかったスレッドが false の場合は false を返します。

Java ではデーモン スレッドはどのように動作しますか?

デーモン スレッドは、スレッドの作成に使用されるスレッドであり、その親スレッドからすべてのプロパティを継承します。したがって、メイン メソッド内に存在するすべてのスレッドは子メソッドと呼ばれ、実行およびタスクの実行に関するほとんどのプロパティを親クラスから継承します。これらは非デーモン スレッドとも呼ばれます。

ここでは、スレッドをデーモン スレッドとして設定するためのすべてのメソッドを呼び出して、非デーモン スレッドまたはユーザー スレッドをデーモン スレッドとして作成する実際の様子を示します。 Thread クラスの setDaemon() メソッドを使用して、デーモン スレッドとして簡単に設定できます。Thread クラスは、実行可能なインターフェイスも拡張されるクラスです。

覚えておくべき非常に重要な点の 1 つは、JVM が開始されるたびに、その時点で main と呼ばれるスレッドが作成され、任意のプログラムがこの時点で実行または開始されるということです。あるいは、これが実行フローが開始されるポイント。デフォルトでは、新しいスレッドが開始されるまで、すべてのスレッドがこのメインスレッドで実行されます。新しいスレッドが開始された場合、子スレッドは新しいメソッドを作成する責任を負います。

次に、デーモン スレッドの作成と決定を担当するメソッドが続きます。これには setDaemon メソッドなどのメソッドが含まれます。このメソッドは、メソッドに渡されたパラメーターの値に基づいて、作成されたスレッドがデーモン スレッドであるか非デーモン スレッドであるかを決定します。

一方、

パブリック ブール スレッド isDaemon() は、戻り値の型に基づいてスレッドのステータスをチェックするために使用されます。 false の場合、スレッドは非デーモンです。それ以外の場合はデーモンです。

メソッド

以下に挙げる方法は次のとおりです

1. public void setDaemon(boolean status)

このメソッドは、渡されたパラメータに基づいて現在のスレッドの実行をデーモン スレッドにするために使用されます。パラメータがブール値の場合、スレッドはデーモン スレッドになります。渡されたパラメータがブール値でない場合、スレッドは非デーモン スレッドになります。 .

IllegalThreadStateException や Security Exception のような保留例外もキャッチします。 illegalThreadStateException をキャッチすると判断された場合は、スレッドがアクティブのみであることが前提条件となります。現在のスレッドを変更できない場合は、セキュリティ例外が使用されます。

2. public boolean isDaemon()

このメソッドは、現在の状況を確認するか、戻り値の型に基づいて現在の状況を伝えるために使用されます。戻り値の型が true の場合、それはデーモン スレッドです。それ以外の場合は、非デーモン スレッドです。

Java のデーモン スレッドの例

以下に挙げる例を次に示します:

例 #1

このプログラムは、void setDaemon(boolean status) とデーモン スレッドの識別後に一度呼び出される isDaemon() メソッドを使用して、さらに操作するためにスレッドをデーモン スレッドとして設定する方法を示します。これは、スレッド セットがデーモン スレッドであるか、デーモン スレッドであるかを表します。パラメータのブール値で設定されたパラメータに応じた非デーモン スレッド。

コード:

public class Daemon_Thread_Demo_set extends Thread {
public Daemon_Thread_Demo_set(String nm){
super(nm);
}
public void run()
{
if(Thread.currentThread().isDaemon())
{
System.out.println("Current_Thread is a Daemon thread" + Thread.currentThread().getName());
}
else
{
System.out.println("Current thread is a non-daemon thread. "+ Thread.currentThread().getName());
}
}
public static void main(String[] args) {
Daemon_Thread_Demo_set nm1 = new Daemon_Thread_Demo_set("nm1");
Daemon_Thread_Demo_set nm2 = new Daemon_Thread_Demo_set("nm2");
Daemon_Thread_Demo_set nm3 = new Daemon_Thread_Demo_set("nm3");
nm1.setDaemon(true);
nm1.start();
nm2.start();
nm3.setDaemon(false);
nm3.start();
}
}

出力:

Javaのデーモンスレッド

Example #2

This program demonstrates the illegal exceptions which are thrown once the current thread is identified as the Daemon thread but then the value when the set is not coming out to be set value matched with the thread it will be throwing the illegal exception as represented in the output.

Code:

public class Daemon_thrd_demo2 extends Thread {
public void run()
{
System.out.println("Current_thread_Name: "+Thread.currentThread().getName());
System.out.println("thread_as_Daemon"+Thread.currentThread().isDaemon());
}
public static void main(String[] args) {
Daemon_thrd_demo2 tst1 = new Daemon_thrd_demo2();
Daemon_thrd_demo2 tst2 = new Daemon_thrd_demo2();
tst1.start();
tst1.setDaemon(true);
tst2.start();
}
}

Output:

Javaのデーモンスレッド

Note: The above program gives the Exception because the user thread should be set as a daemon thread only before calling the setDaemon() method. If it is not called in this way, then the thread after invocation will throw these exceptions while execution. Also, all non-daemon thread and daemon thread should be set up keeping in mind the place, i.e. before the child class or before the parent class.

Conclusion

Daemon thread and non-daemon thread have differences in them. It is very important to identify these differences as it can lead to conflicts and exception because daemon thread is a kind of thread that has the lowest priority compared to other threads while execution.

以上がJavaのデーモンスレッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。