JAvaデーモンスレッドの理解
1463 ワード
デーモンスレッドと通常のスレッドの唯一の違いは、次のとおりです.
理解1:デーモンスレッドはmainが共生共死であり、mainが終了すると終了し、通常のスレッドはタスクの実行が終了してから停止する.
理解2:ユーザースレッド:Java仮想マシンは、すべての非デーモンスレッドが離れた後に自動的に離れます.デーモン・スレッドは、ユーザー・スレッドにサービスを提供するために使用され、他のユーザー・スレッドが実行されていなければ、サービス可能なオブジェクトがなく、継続する理由もありません.
例えば、私たちがよく知っているJavaゴミ回収スレッドは典型的なデーモンスレッドであり、私たちのプログラムに実行中のThreadがなくなった場合、プログラムはゴミを発生せず、ゴミ回収器も何もできないので、ゴミ回収スレッドがJava仮想マシンに残っているスレッドである場合、Java仮想機会は自動的に離れます.
テストコード:
スレッド
スレッドtが存在するため、デーモンスレッドdaemonThreadは常に実行され、次のコードを注釈すると、デーモンスレッドdaemonThreadはmainが終了するにつれて終了する.
理解1:デーモンスレッドはmainが共生共死であり、mainが終了すると終了し、通常のスレッドはタスクの実行が終了してから停止する.
理解2:ユーザースレッド:Java仮想マシンは、すべての非デーモンスレッドが離れた後に自動的に離れます.デーモン・スレッドは、ユーザー・スレッドにサービスを提供するために使用され、他のユーザー・スレッドが実行されていなければ、サービス可能なオブジェクトがなく、継続する理由もありません.
例えば、私たちがよく知っているJavaゴミ回収スレッドは典型的なデーモンスレッドであり、私たちのプログラムに実行中のThreadがなくなった場合、プログラムはゴミを発生せず、ゴミ回収器も何もできないので、ゴミ回収スレッドがJava仮想マシンに残っているスレッドである場合、Java仮想機会は自動的に離れます.
テストコード:
スレッド
public class ThreadDemo implements Runnable {
public void run() {
while (true) {
for (int i = 1; i <= 100; i++) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class Test {
public static void main(String[] args) {
Thread daemonThread = new Thread(new ThreadDemo());
daemonThread.setName(" thread");
//
daemonThread.setDaemon(true);
daemonThread.start();
System.out.println("isDaemon = " + daemonThread.isDaemon());
Thread t = new Thread(new ThreadDemo());
t.start();
}
}
スレッドtが存在するため、デーモンスレッドdaemonThreadは常に実行され、次のコードを注釈すると、デーモンスレッドdaemonThreadはmainが終了するにつれて終了する.
Thread t = new Thread(new ThreadDemo());
t.start();