先來看看下面這個例子:
class Test extends Thread {
????????@Override public void run() {
????????????????setName("thread");
????????????????try {
????????????????????????sleep(200);
????????????????} catch (InterruptedException e) {
????????????????????????e.printStackTrace();
????????????????}
????????????????System.out.println(Thread.currentThread().getName());
????????}
????????public static void main(String[] args) {
????????????????Thread thread = new Test();
????????????????thread.setDaemon(true); // 設置為守護線程
????????????????thread.run();
????????????????thread.start();
????????}
}
結果是只打印 main:
這是因為當所有常規(guī)線程運行完畢以后箩做,守護線程不管運行到哪里娄徊,虛擬機都會退出運行讲岁。
通過 thread 實例調用 run 方法的行為是在 main 中進行的著觉,這里為主線程,所以打印 main;之后調用 start 方法啟動線程執(zhí)行 run 時,main 已經執(zhí)行完畢,而該線程為守護線程瓤狐,虛擬機不必等待線程執(zhí)行完就已經退出了,所以不會打印 thread批幌。