Java線程分為用戶線程和守護線程,二者的區別在于程序結束時的處理方式不同。用戶線程是在程序中由開發者創建的線程,而守護線程是由JVM內部創建的線程。
在程序運行結束時,如果所有的用戶線程都已經結束,JVM就會結束程序。而如果還有守護線程在運行,JVM會等待所有守護線程結束后再結束程序。
舉個例子,比如在Web服務器中,守護線程負責監聽用戶請求,如果用戶線程處理完請求后沒有關閉,那么守護線程會主動關閉它。
public class DaemonDemo { public static void main(String[] args) { Thread userThread = new Thread(() ->{ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("用戶線程執行完畢"); }); Thread daemonThread = new Thread(() ->{ while (true) { System.out.println("守護線程正在運行"); } }); daemonThread.setDaemon(true); userThread.start(); daemonThread.start(); System.out.println("主線程執行完畢"); } }
上面的代碼演示了如何創建用戶線程和守護線程,并設置守護線程。可以看出,在程序運行到最后,主線程已經結束,但是守護線程還在運行。