Java/Threads/Daemon

Материал из Java эксперт
Перейти к: навигация, поиск

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();
  }
}