首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 多線程基礎總結(二):Thread 守護線程與 join() 協作機制

     編輯:Java 相關知識

本文聚焦 Thread 兩個核心協作方法:setDaemon() 與 join(),它們決定了線程的生命週期與執行順序。

守護線程:背後的「隱形守護者」

  • **定義**:setDaemon(true) 標記為守護線程(默認 false)。
  • **規則**:JVM 若**僅剩守護線程**存活,則**直接退出**,不等待它們結束。
  • **典型用途**:GC、Finalizer、監控、定時任務等輔助性工作。

代碼演示

public class DaemonSample {
    public static void main(String[] args) throws Exception {
        DaemonThread t = new DaemonThread();
        t.setDaemon(true); // 標記為守護線程
        t.start();
        Thread.sleep(2000);
        System.out.println("main thread exit."); // 主線程結束,JVM 退出
    }
}

class DaemonThread extends Thread {
    public void run() {
        for (int i=0; i<10; i++) {
            Thread.sleep(1000);
            System.out.println("i=" + i); // 只能跑 2 次就被強制終止
        }
    }
}

註釋 setDaemon(true) 後,主線程結束但子線程會繼續跑完 10 秒。

join():線程間的「順序強制」

  • **語義**:調用線程**阻塞等待**,直到被調用線程終止(內部實現 wait(0))。
  • **用途**:簡單的線程執行順序控制、主線程等待子線程結果。

代碼演示

public class JoinSample {
    public static void main(String[] args) throws Exception {
        Thread t = new Thread(new SubThread());
        t.start();
        t.join(); // main 阻塞,等待 t 結束
        System.out.println("The end of main thread...");
    }
}

class SubThread implements Runnable {
    public void run() {
        Thread.sleep(2000);
        System.out.println("The end of sub thread..."); // 先打印這行
    }
}

註釋 t.join() 後,main 線程不再等待,先結束。

多核時代的啟示

從單核到多核(雙核、4核、48核…),硬件推動了並發編程從「可選」變為「必修」。掌握線程基礎協作,是利用多核優勢的第一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved