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

Java四種線程創(chuàng)建方式示例代碼

 更新時(shí)間:2026年01月20日 08:56:09   作者:⑩-  
在Java中創(chuàng)建線程的方法有多種,每種方法都有其獨(dú)特的適用場(chǎng)景和優(yōu)缺點(diǎn),這篇文章主要介紹了Java四種線程創(chuàng)建方式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一句話先給你總覽(先建立大腦地圖)

Java 創(chuàng)建線程 = 兩大類(lèi) + 四種方式

分類(lèi)

方式

直接創(chuàng)建線程

① 繼承 Thread

② 實(shí)現(xiàn) Runnable

“高級(jí)”線程(推薦)

③ 實(shí)現(xiàn) Callable

+ Future

④ 線程池 ExecutorService

一、方式 ①:繼承 Thread(最直觀,但不推薦)

1.核心思想

線程 = 一個(gè)類(lèi)

任務(wù)寫(xiě)在 run()

2.代碼(你必須記住這個(gè)結(jié)構(gòu))

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("線程在執(zhí)行:" + Thread.currentThread().getName());
    }
}
 
public class Test {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start(); // ?必須是 start()
    }
}

3.必須牢記的 2 個(gè)坑(面試 & 實(shí)戰(zhàn)必考)

不能調(diào)用 run()

t.run(); // 這不是多線程,只是普通方法調(diào)用

必須調(diào)用

t.start(); // JVM 創(chuàng)建新線程

Java 只能單繼承

class A extends Thread extends B // ? 不可能

4.什么時(shí)候用?

  • 學(xué)習(xí)
  • Demo
  • 面試講原理

真實(shí)項(xiàng)目基本不用

二、方式 ②:實(shí)現(xiàn) Runnable

1.核心思想(非常重要)

線程(Thread) ≠ 任務(wù)(Runnable)

  • Runnable:你要做什么
  • Thread:誰(shuí)來(lái)執(zhí)行

解耦思想(面試高頻)

2.標(biāo)準(zhǔn)寫(xiě)法(必須背)

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("線程執(zhí)行:" + Thread.currentThread().getName());
    }
}
 
public class Test {
    public static void main(String[] args) {
        Runnable task = new MyRunnable();
        Thread t = new Thread(task);
        t.start();
    }
}

3.為什么它比繼承 Thread 好?

可以繼承別的類(lèi)

多個(gè)線程共享同一個(gè)任務(wù)

符合面向?qū)ο笤O(shè)計(jì)

4.一個(gè)非常關(guān)鍵的共享例子(一定要看)

class TicketTask implements Runnable {
    private int ticket = 100;
 
    public void run() {
        while (ticket > 0) {
            System.out.println(Thread.currentThread().getName()
                + " 賣(mài)出第 " + ticket-- + " 張票");
        }
    }
}
 
public static void main(String[] args) {
    TicketTask task = new TicketTask();
    new Thread(task, "窗口1").start();
    new Thread(task, "窗口2").start();
}

同一個(gè) task,被多個(gè)線程執(zhí)行

5.什么時(shí)候用?

99% 的普通多線程場(chǎng)景

三、方式 ③:Callable + Future(能返回結(jié)果)

1.為什么需要它?

前兩種:

  • 不能返回結(jié)果
  • 不能拋受檢異常

Callable = 帶返回值的 Runnable

2.代碼(結(jié)構(gòu)一定要搞懂)

import java.util.concurrent.*;
 
class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        Thread.sleep(1000);
        return 100;
    }
}
 
public class Test {
    public static void main(String[] args) throws Exception {
        Callable<Integer> task = new MyCallable();
 
        FutureTask<Integer> futureTask = new FutureTask<>(task);
 
        Thread t = new Thread(futureTask);
        t.start();
 
        Integer result = futureTask.get(); // 阻塞等待結(jié)果
        System.out.println("結(jié)果:" + result);
    }
}

3.關(guān)鍵角色理解(一定要清楚)

類(lèi)

作用

Callable<V>

定義任務(wù)(有返回值)

FutureTask<V>

任務(wù) + 結(jié)果容器

get()

等待線程執(zhí)行完成

4.什么時(shí)候用?

  • 異步計(jì)算
  • 并行任務(wù)
  • 需要返回結(jié)果

四、方式 ④:線程池

1.為什么一定要用線程池?

直接 new Thread 的問(wèn)題:

  • 線程創(chuàng)建/銷(xiāo)毀開(kāi)銷(xiāo)大
  • 不可控
  • 容易 OOM

線程池:

  • 線程復(fù)用
  • 統(tǒng)一管理
  • 性能 & 穩(wěn)定性最好

2.最基礎(chǔ)用法(你先會(huì)這個(gè))

ExecutorService pool = Executors.newFixedThreadPool(3);
 
pool.execute(() -> {
    System.out.println(Thread.currentThread().getName());
});
 
pool.shutdown();

3.提交 Runnable / Callable

// Runnable
pool.execute(() -> System.out.println("無(wú)返回值"));
 
// Callable
Future<Integer> f = pool.submit(() -> 1 + 2);
System.out.println(f.get());

4.真實(shí)項(xiàng)目用什么?

線程池 + Runnable / Callable

五、四種方式終極對(duì)比(背這個(gè)就夠)

方式

返回值

繼承限制

推薦指數(shù)

繼承 Thread

?

?

?

Runnable

?

?

????

Callable

?

?

????

線程池

?

?

?????

六、面試一句話總結(jié)(直接抄)

Java 創(chuàng)建線程有四種方式:繼承 Thread、實(shí)現(xiàn) Runnable、實(shí)現(xiàn) Callable 結(jié)合 Future、以及使用線程池。
實(shí)際開(kāi)發(fā)中推薦使用線程池 + Runnable/Callable,避免直接創(chuàng)建線程。

七、給你 3 道自測(cè)題(你能答出來(lái)就是真的會(huì)了)

?1

run()start() 有什么區(qū)別?

?2

為什么不推薦繼承 Thread?

?3

線程池解決了什么問(wèn)題?

總結(jié)

到此這篇關(guān)于Java四種線程創(chuàng)建方式的文章就介紹到這了,更多相關(guān)Java線程創(chuàng)建方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java 線程中斷

    詳解Java 線程中斷

    這篇文章主要介紹了Java 線程中斷的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-02-02
  • 最安全的加密算法Bcrypt防止數(shù)據(jù)泄露詳解

    最安全的加密算法Bcrypt防止數(shù)據(jù)泄露詳解

    這篇文章主要為大家介紹了最安全的加密算法Bcrypt防止數(shù)據(jù)泄露詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)詳解

    Java數(shù)據(jù)結(jié)構(gòu)之堆(優(yōu)先隊(duì)列)詳解

    堆(優(yōu)先隊(duì)列)是一種典型的數(shù)據(jù)結(jié)構(gòu),其形狀是一棵完全二叉樹(shù),一般用于求解topk問(wèn)題。本文將利用Java語(yǔ)言實(shí)現(xiàn)堆,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • Spring中的BeanFactory類(lèi)入門(mén)到精通

    Spring中的BeanFactory類(lèi)入門(mén)到精通

    BeanFactory是Spring框架的IoC容器接口,提供Bean的生命周期管理、依賴注入和配置元數(shù)據(jù),它支持懶加載策略,并通過(guò)實(shí)現(xiàn)類(lèi)如DefaultListableBeanFactory來(lái)完成具體的Bean創(chuàng)建和依賴注入,本文介紹Spring中的BeanFactory類(lèi),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java可視化之實(shí)現(xiàn)文本的加密和解密

    Java可視化之實(shí)現(xiàn)文本的加密和解密

    這篇文章主要介紹了Java可視化之實(shí)現(xiàn)文本的加密和解密,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 簡(jiǎn)單總結(jié)單例模式的4種寫(xiě)法

    簡(jiǎn)單總結(jié)單例模式的4種寫(xiě)法

    今天帶大家學(xué)習(xí)java的相關(guān)知識(shí),文章圍繞著單例模式的4種寫(xiě)法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解在springmvc中解決FastJson循環(huán)引用的問(wèn)題

    詳解在springmvc中解決FastJson循環(huán)引用的問(wèn)題

    本篇文章主要介紹了在springmvc中解決FastJson循環(huán)引用的問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Java實(shí)現(xiàn)獲取一段文字中文字符數(shù)量的工具類(lèi)

    Java實(shí)現(xiàn)獲取一段文字中文字符數(shù)量的工具類(lèi)

    隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),各類(lèi)應(yīng)用中對(duì)于文本的處理日益頻繁,本文將設(shè)計(jì)實(shí)現(xiàn)一個(gè)通用的 Java 工具類(lèi),能夠高效準(zhǔn)確地統(tǒng)計(jì)一段文本中 中文字符的數(shù)量,感興趣的可以了解下
    2025-07-07
  • 使用java?-Dloader.path=./lib?-jar啟動(dòng)應(yīng)用的完整實(shí)踐指南

    使用java?-Dloader.path=./lib?-jar啟動(dòng)應(yīng)用的完整實(shí)踐指南

    java -Dloader.path="lib/" -jar XXXX.jar是一個(gè)用于啟動(dòng)Java 應(yīng)用程序的命令,這篇文章主要介紹了使用java?-Dloader.path=./lib?-jar啟動(dòng)應(yīng)用的完整實(shí)踐指南,文中給出了詳細(xì)代碼示例,需要的朋友可以參考下
    2025-10-10
  • Java Boolean 初始化方式詳解

    Java Boolean 初始化方式詳解

    這篇文章主要介紹了Java Boolean 初始化方式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

昌乐县| 响水县| 阿克| 吉安县| 巴中市| 敦煌市| 辉南县| 武邑县| 延津县| 昆明市| 九龙坡区| 玛多县| 正镶白旗| 新绛县| 尼玛县| 北流市| 会理县| 双牌县| 绥江县| 上栗县| 屏边| 龙川县| 宜丰县| 新宾| 陆丰市| 宣汉县| 大连市| 绿春县| 海伦市| 简阳市| 乐亭县| 莱阳市| 容城县| 云霄县| 阿拉尔市| 永仁县| 尼勒克县| 深圳市| 西乌珠穆沁旗| 黄大仙区| 滁州市|