[Java]ユーザスレッドとデーモンスレッド
1934 ワード
JAvaスレッドは、ユーザースレッド額デーモンスレッドの2つに分けることができます.ユーザスレッドは、フロントスレッドと呼ばれる場合があります.私たちはプログラムを書く時、いくつかの時間のかかる処理をメインスレッドの中から出して、単独の1つのスレッドの中に置いて実行して、メインスレッドの運行を阻止しないようにして、インタフェースが1種の応答のない状態になって、他の操作を行うことができなくて、このようなユーザーの体験はとてもよくありません.一般的に、プログラムで作成されたスレッドはユーザースレッドであり、プログラムで使用されます.これらのスレッドは正常に終了するまで実行するか、要求に従って終了する必要があります.
デーモンスレッドはバックグラウンドスレッドと呼ばれることがあります.私たちはプログラムの中で一般的にバックグラウンドスレッドを作成することはめったにありません.それは一般的にJVMによって作成され、黙ってバックグラウンドで実行され、システムや私たちのプログラムにいくつかのサービスを提供します.たとえば、オブジェクトの使用状況をタイミング的に検出し、オブジェクトの参照を計算し、必要に応じてオブジェクトの破棄とリソースの回収を実行します.私たちのプログラムは一般的にそれを管理する必要はありません.
ユーザスレッドとデーモンスレッドは本質的に大きな違いはありませんが、適用シーンが異なるだけです.スレッドの作成時にsetDaemon(true)を実行すると、スレッドがデーモンスレッドとなり、スレッドが起動する前に設定しなければなりません.そうしないと、例外が発生します.また,デーモンスレッド内に作成されたスレッドは自動的にデーモンスレッドとなり,ユーザスレッド内に作成されたスレッドは自動的にユーザスレッドとなる.もう1つは、1つのユーザスレッドが実行されていない限り、JVMは自動的に終了しません.ただし、すべてのユーザスレッドが実行されると、JVMは自動的に終了し、現在もデーモンスレッドが実行されている場合は、すぐにすべて終了します.言い換えれば,デーモンスレッドが実行される保証はなく,ユーザスレッドがすべて終了すると,デーモンスレッドはJVMによって非情に終了する.この点に注意して、デーモンスレッドを使用します.
簡単な例:
次に、実行結果を示します.
ユーザースレッドの0実行!デーモンスレッドの0実行!デーモンスレッドの1実行!ユーザースレッドの1実行!デーモンスレッドの2実行!ユーザースレッドの2実行!デーモンスレッドの3実行!ユーザースレッドの3実行!デーモンスレッドの4実行!ユーザースレッドの4実行!デーモンスレッドの5実行!文章に間違いがあれば、提出してください.共同で討論してください.
デーモンスレッドはバックグラウンドスレッドと呼ばれることがあります.私たちはプログラムの中で一般的にバックグラウンドスレッドを作成することはめったにありません.それは一般的にJVMによって作成され、黙ってバックグラウンドで実行され、システムや私たちのプログラムにいくつかのサービスを提供します.たとえば、オブジェクトの使用状況をタイミング的に検出し、オブジェクトの参照を計算し、必要に応じてオブジェクトの破棄とリソースの回収を実行します.私たちのプログラムは一般的にそれを管理する必要はありません.
ユーザスレッドとデーモンスレッドは本質的に大きな違いはありませんが、適用シーンが異なるだけです.スレッドの作成時にsetDaemon(true)を実行すると、スレッドがデーモンスレッドとなり、スレッドが起動する前に設定しなければなりません.そうしないと、例外が発生します.また,デーモンスレッド内に作成されたスレッドは自動的にデーモンスレッドとなり,ユーザスレッド内に作成されたスレッドは自動的にユーザスレッドとなる.もう1つは、1つのユーザスレッドが実行されていない限り、JVMは自動的に終了しません.ただし、すべてのユーザスレッドが実行されると、JVMは自動的に終了し、現在もデーモンスレッドが実行されている場合は、すぐにすべて終了します.言い換えれば,デーモンスレッドが実行される保証はなく,ユーザスレッドがすべて終了すると,デーモンスレッドはJVMによって非情に終了する.この点に注意して、デーモンスレッドを使用します.
簡単な例:
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable(){
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(" " + i + " !");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}});
Thread t2 = new Thread(new Runnable(){
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println(" " + i + " !");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}});
t2.setDaemon(true);
t1.start();
t2.start();
}
次に、実行結果を示します.
ユーザースレッドの0実行!デーモンスレッドの0実行!デーモンスレッドの1実行!ユーザースレッドの1実行!デーモンスレッドの2実行!ユーザースレッドの2実行!デーモンスレッドの3実行!ユーザースレッドの3実行!デーモンスレッドの4実行!ユーザースレッドの4実行!デーモンスレッドの5実行!文章に間違いがあれば、提出してください.共同で討論してください.