Java分为两种线程:用户线程和守护线程。

用户线程

即用户定义的线程,包括main线程。只要用户线程还在运行,程序就不会终止。

守护线程

  • 就是在程序运行的时候后台提供一种通用服务的线程,比如垃圾回收线程。
  • 这种线程并不属于程序不可或缺的一部分。
  • 当所有非守护进程结束的时候,程序就终止了,并会杀死进程中所有的守护线程。所以不要在守护进程中执行业务逻辑操作。
  • Daemon线程创建的子线程仍然是Daemon线程。
  • Java的Daemon线程,setDaemon( )设置必须要在start之前。
  1. public class DaemonSample {
  2. static class DaemonThread extends Thread {
  3. public String name;
  4. public DaemonThread(String name){
  5. this.name = name;
  6. }
  7. public void run(){
  8. for(int i=0; i<10; i++){
  9. try{
  10. Thread.sleep(100);
  11. } catch (InterruptedException e){
  12. e.printStackTrace();
  13. }
  14. System.out.println(name+"i=" +i);
  15. }
  16. }
  17. }
  18. public static void main(String[] args) throws InterruptedException{
  19. Thread t1 = new DaemonThread("a");
  20. t1.setDaemon(true);
  21. Thread t2 = new DaemonThread("b");
  22. t1.start();
  23. // t2.start();
  24. System.out.println("aaa");
  25. Thread.sleep(400); //暂停当前线程,把cpu片让给其他线程,即当前main线程并没有结束,让出的时间守护线程可以执行
  26. System.out.println("bbb");
  27. }
  28. }