最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Thread 類的基本用法、Java 線程的幾種狀態(tài)分析

 更新時(shí)間:2026年01月10日 08:56:17   作者:我會(huì)替風(fēng)去  
Java中的Thread類是多線程編程的核心,Java線程共有6種狀態(tài),包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,接下來(lái)通過(guò)本文給大家介紹Thread 類的基本用法、Java 線程的幾種狀態(tài),感興趣的朋友跟隨小編一起看看吧

在Java中,Thread類是多線程編程的核心。

線程創(chuàng)建 (Thread Creation)

  • 創(chuàng)建線程主要有兩種邏輯:繼承Thread類或?qū)崿F(xiàn)Runnable接口。
    • 方式1:繼承 Thread 類,重寫(xiě)run()
// 自定義線程類繼承Thread
class MyThread extends Thread {
    // 重寫(xiě)run(),定義線程執(zhí)行邏輯
    @Override
    public void run() {
        System.out.println("子線程執(zhí)行:" + Thread.currentThread().getName());
    }
}

// 使用
public class Demo {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // 3. 調(diào)用start()啟動(dòng)線程(不能直接調(diào)用run())
    }
}
  • 方式2:實(shí)現(xiàn)Runnable接口,傳給Thread
// 實(shí)現(xiàn)Runnable接口
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("子線程執(zhí)行:" + Thread.currentThread().getName());
    }
}

// 使用
public class Demo {
    public static void main(String[] args) {
        // 把Runnable實(shí)例傳給Thread
        Thread t = new Thread(new MyRunnable());
        t.start(); // 啟動(dòng)線程
    }
}

線程中斷 (Thread Interruption)

  • 線程中斷不是強(qiáng)制停止線程,而是一種協(xié)作機(jī)制,即給線程發(fā)一個(gè)“請(qǐng)停止”的信號(hào)。
  • void interrupt():標(biāo)記線程為 “中斷狀態(tài)”
  • boolean isInterrupted():判斷線程是否處于中斷狀態(tài)
  • 若線程在sleep/wait/join時(shí)被中斷,會(huì)拋出InterruptedException,且中斷狀態(tài)會(huì)被清除
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) { // 檢測(cè)中斷狀態(tài)
        System.out.println("線程運(yùn)行中...");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // 捕獲中斷異常后,中斷狀態(tài)會(huì)被清除,需手動(dòng)終止循環(huán)
            System.out.println("線程被中斷");
            Thread.currentThread().interrupt(); // 重新標(biāo)記中斷(可選)
            break;
        }
    }
});
t.start();
// 主線程1秒后中斷子線程
Thread.sleep(1000);
t.interrupt();

線程等待 (Thread Join)

  • 有時(shí)主線程需要等待子線程執(zhí)行完畢后再繼續(xù)執(zhí)行,這時(shí)可以使用join()。
  • t.join():當(dāng)前線程會(huì)進(jìn)入阻塞狀態(tài),直到線程t執(zhí)行結(jié)束。
  • 帶參數(shù)的 join(long millis):設(shè)置最大等待時(shí)間,如果超時(shí)線程還沒(méi)結(jié)束,當(dāng)前線程就不再等待。
Thread t = new Thread(() -> {
    System.out.println("子線程開(kāi)始執(zhí)行");
    try { Thread.sleep(2000); } catch (InterruptedException e) {}
    System.out.println("子線程執(zhí)行完畢");
});
t.start();

// 主線程等待t執(zhí)行完(最多等3秒)
t.join(3000); 
System.out.println("主線程繼續(xù)執(zhí)行");

線程休眠 (Thread Sleep)

  • static void sleep(long millis):讓當(dāng)前線程暫停指定時(shí)間(不會(huì)釋放鎖),拋出InterruptedException
System.out.println("開(kāi)始休眠");
try {
    Thread.sleep(2000); // 當(dāng)前線程休眠2秒
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println("休眠結(jié)束");

獲取線程實(shí)例 (Get Current Instance)

  • 在編寫(xiě)通用代碼(尤其是 Runnable 中)時(shí),常需要知道是誰(shuí)在運(yùn)行。
  • Thread.currentThread():返回代碼當(dāng)前正在執(zhí)行的那個(gè)線程對(duì)象的引用。
  • 常用操作:獲取線程 ID (getId())、獲取線程名稱 (getName()) 等。
// 獲取當(dāng)前線程(這里是main線程)
Thread mainThread = Thread.currentThread();
System.out.println("當(dāng)前線程名:" + mainThread.getName()); // 輸出"main"

// 子線程實(shí)例
Thread t = new Thread(() -> {
    Thread current = Thread.currentThread();
    System.out.println("子線程名:" + current.getName()); // 輸出"Thread-0"
});
t.start();

Java線程的幾種狀態(tài)

線程狀態(tài)一共有幾種?

  • Java線程共有6種狀態(tài):
    • NEW (新建)
    • RUNNABLE (可運(yùn)行)
    • BLOCKED (阻塞)
    • WAITING (等待)
    • TIMED_WAITING (超時(shí)等待)
    • TERMINATED (終止)

每種狀態(tài)的含義與切換條件

  • NEW (新建)
  • 含義:創(chuàng)建了線程對(duì)象(new Thread()),但尚未調(diào)用 start() 方法。
  • 切換:調(diào)用 start() 方法后,進(jìn)入 RUNNABLE 狀態(tài)。
  • RUNNABLE (可運(yùn)行)
  • 含義:Java 將操作系統(tǒng)中的“就緒(Ready)”和“運(yùn)行中(Running)”兩種狀態(tài)統(tǒng)稱為 RUNNABLE。處于該狀態(tài)的線程可能正在 CPU 上執(zhí)行,也可能正在等待操作系統(tǒng)分配時(shí)間片。
  • 切換:
    • 就緒 -> 運(yùn)行:獲得 CPU 時(shí)間片。
    • 運(yùn)行 -> 就緒:CPU 時(shí)間片用完,或主動(dòng)調(diào)用 Thread.yield()。
  • BLOCKED (阻塞)
  • 含義:線程正在等待獲取一個(gè)排他鎖(如進(jìn)入synchronized 代碼塊/方法),但該鎖目前被其他線程持有。
  • 切換:
    • RUNNABLE -> BLOCKED:嘗試進(jìn)入 synchronized 區(qū)域失敗。
    • BLOCKED -> RUNNABLE:其他線程釋放鎖,當(dāng)前線程成功競(jìng)爭(zhēng)到鎖。
  • WAITING (等待)
  • 含義:線程處于無(wú)限期的等待狀態(tài),不會(huì)被分配 CPU 時(shí)間,必須等待其他線程顯式地喚醒。
  • 切換:
    • RUNNABLE -> WAITING:調(diào)用 Object.wait()(不帶參數(shù))、Thread.join()(不帶參數(shù))或 LockSupport.park()。
    • WAITING -> RUNNABLE:其他線程調(diào)用 Object.notify()、notifyAll() 或 LockSupport.unpark()。
  • TIMED_WAITING (超時(shí)等待)
  • 含義:與 WAITING 類似,但在指定的時(shí)間后會(huì)自動(dòng)喚醒,不需要其他線程顯式喚醒。
  • 切換:
    • RUNNABLE -> TIMED_WAITING:調(diào)用 Thread.sleep(ms)、Object.wait(ms)、Thread.join(ms) 等帶時(shí)間參數(shù)的方法。
    • TIMED_WAITING -> RUNNABLE:時(shí)間結(jié)束,或被提前喚醒(如 notify())。
  • TERMINATED (終止)
  • 含義:線程已經(jīng)執(zhí)行完畢(run() 方法正常結(jié)束)或因異常退出了執(zhí)行。
  • 切換:線程一旦進(jìn)入此狀態(tài),生命周期結(jié)束,不可再次啟動(dòng)(再次調(diào)用 start() 會(huì)拋出異常)。

到此這篇關(guān)于Thread 類的基本用法、Java 線程的幾種狀態(tài)分析的文章就介紹到這了,更多相關(guān)Java Thread 類用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot單元測(cè)試中@SpyBean使用小結(jié)

    SpringBoot單元測(cè)試中@SpyBean使用小結(jié)

    本文主要介紹了SpringBoot單元測(cè)試中@SpyBean使用小結(jié),@SpyBean用于部分模擬SpringBean,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • 使用@RequestBody配合@Valid校驗(yàn)入?yún)?shù)

    使用@RequestBody配合@Valid校驗(yàn)入?yún)?shù)

    這篇文章主要介紹了使用@RequestBody配合@Valid校驗(yàn)入?yún)?shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring Cloud詳解實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法

    Spring Cloud詳解實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法

    這篇文章主要介紹了Spring Cloud實(shí)現(xiàn)聲明式微服務(wù)調(diào)用OpenFeign方法,OpenFeign 是 Spring Cloud 家族的一個(gè)成員, 它最核心的作用是為 HTTP 形式的 Rest API 提供了非常簡(jiǎn)潔高效的 RPC 調(diào)用方式,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2022-07-07
  • request.getParameter()方法的簡(jiǎn)單理解與運(yùn)用方式

    request.getParameter()方法的簡(jiǎn)單理解與運(yùn)用方式

    在JavaWeb開(kāi)發(fā)中,request對(duì)象扮演著至關(guān)重要的角色,它是HTTP請(qǐng)求的封裝,request.getParameter()用于獲取客戶端通過(guò)GET或POST方式發(fā)送的參數(shù),與之相對(duì),request.setAttribute()用于在服務(wù)器端設(shè)置屬性,這些屬性只在一次請(qǐng)求中有效
    2024-10-10
  • SpringCloud?LoadBalancerClient?負(fù)載均衡原理解析

    SpringCloud?LoadBalancerClient?負(fù)載均衡原理解析

    LoadBalancerClient?是?SpringCloud?提供的一種負(fù)載均衡客戶端,Ribbon?負(fù)載均衡組件內(nèi)部也是集成了?LoadBalancerClient?來(lái)實(shí)現(xiàn)負(fù)載均衡,本文給大家深入解析?LoadBalancerClient?接口源碼,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)

    SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái)

    這篇文章主要介紹了SSM框架下如何實(shí)現(xiàn)數(shù)據(jù)從后臺(tái)傳輸?shù)角芭_(tái),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 詳解JAVA 設(shè)計(jì)模式之狀態(tài)模式

    詳解JAVA 設(shè)計(jì)模式之狀態(tài)模式

    這篇文章主要介紹了JAVA 狀態(tài)模式的的相關(guān)資料,文中講解的非常細(xì)致,幫助大家更好的學(xué)習(xí)理解JAVA 設(shè)計(jì)模式,感興趣的朋友可以了解下
    2020-06-06
  • java實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲

    java實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • SpringBoot基礎(chǔ)框架詳解

    SpringBoot基礎(chǔ)框架詳解

    SpringBoot開(kāi)發(fā)目的是為了簡(jiǎn)化Spring應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試和部署等,使用Spring Boot可以不用或者只需要很少的Spring配置就可以讓企業(yè)項(xiàng)目快速運(yùn)行起來(lái),本文介紹SpringBoot基礎(chǔ)框架詳解,感興趣的朋友一起看看吧
    2025-05-05
  • java中利用List的subList方法實(shí)現(xiàn)對(duì)List分頁(yè)(簡(jiǎn)單易學(xué))

    java中利用List的subList方法實(shí)現(xiàn)對(duì)List分頁(yè)(簡(jiǎn)單易學(xué))

    本篇文章主要介紹了java中l(wèi)ist數(shù)據(jù)拆分為sublist實(shí)現(xiàn)頁(yè)面分頁(yè)的簡(jiǎn)單代碼,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11

最新評(píng)論

安义县| 新安县| 芜湖县| 深水埗区| 赣榆县| 河北区| 永昌县| 宣武区| 梓潼县| 聂荣县| 商河县| 普格县| 永济市| 文成县| 会泽县| 大新县| 博白县| 内黄县| 伊川县| 东海县| 岱山县| 浙江省| 额敏县| 石景山区| 上思县| 两当县| 密云县| 梓潼县| 兴国县| 望城县| 屏东县| 来凤县| 娱乐| 钟祥市| 龙井市| 贵德县| 壶关县| 正阳县| 交城县| 南充市| 富源县|