Java Tutorial/Thread/Daemon Thread
Содержание
A daemon thread.
class MyDaemon implements Runnable {
Thread thrd;
MyDaemon() {
thrd = new Thread(this);
thrd.setDaemon(true);
thrd.start();
}
public boolean isDaemon(){
return thrd.isDaemon();
}
public void run() {
try {
while(true) {
System.out.print(".");
Thread.sleep(100);
}
}
catch(Exception exc) {
System.out.println("MyDaemon interrupted.");
}
}
}
public class Main {
public static void main(String args[]) throws Exception{
MyDaemon dt = new MyDaemon();
if(dt.isDaemon())
System.out.println("dt is a daemon thread.");
Thread.sleep(10000);
System.out.println("\nMain thread ending.");
}
}
A live daemon thread does not prevent an application from exiting.
class MyThread extends Thread {
MyThread() {
setDaemon(true);
}
public void run() {
boolean isDaemon = isDaemon();
System.out.println("isDaemon:" + isDaemon);
}
}
public class Main {
public static void main(String[] argv) throws Exception {
Thread thread = new MyThread();
thread.setDaemon(true);
thread.start();
}
}
An application exits when there are no non-daemon threads running.
class MyThread extends Thread {
MyThread() {
setDaemon(true);
}
public void run() {
boolean isDaemon = isDaemon();
System.out.println("isDaemon:" + isDaemon);
}
}
public class Main {
public static void main(String[] argv) throws Exception {
Thread thread = new MyThread();
thread.setDaemon(true);
thread.start();
}
}
A thread must be marked as a daemon thread before it is started.
class MyThread extends Thread {
MyThread() {
setDaemon(true);
}
public void run() {
boolean isDaemon = isDaemon();
System.out.println("isDaemon:" + isDaemon);
}
}
public class Main {
public static void main(String[] argv) throws Exception {
Thread thread = new MyThread();
thread.setDaemon(true);
thread.start();
}
}
Daemon and User Threads
- A daemon thread is a background thread.
- It is subordinate to the thread that creates it.
- When the thread that created the daemon thread ends, the daemon thread dies with it.