Java/Threads/Daemon

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

A daemon thread.

   <source lang="java">

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.");
 }

}

 </source>
   
  
 
  



A live daemon thread does not prevent an application from exiting.

   <source lang="java">

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

}

 </source>
   
  
 
  



An application exits when there are no non-daemon threads running.

   <source lang="java">

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

}

 </source>
   
  
 
  



A thread must be marked as a daemon thread before it is started.

   <source lang="java">

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

}

 </source>