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

Java都有哪些創(chuàng)建線程的方法

 更新時間:2022年05月09日 11:19:57   作者:??Java中文社群????  
這篇文章主要介紹了Java都有哪些創(chuàng)建線程的方法,文章分享Java創(chuàng)建線程得幾種方法及推薦使用哪種方法,下面詳細(xì)內(nèi)容需要的小伙伴可以參考一下

在 Java 中,線程的創(chuàng)建方法有 7 種,分為以下 3 大類:

  • 繼承 Thread 類的方式,它有 2 種實(shí)現(xiàn)方法。
  • 實(shí)現(xiàn) Runnable 接口的方式,它有 3 種實(shí)現(xiàn)方法。
  • 實(shí)現(xiàn) Callable 接口的方式,它有 2 種實(shí)現(xiàn)方法。

1.繼承Thread類

繼承 Thread 類并重寫 run 方法,是最早期創(chuàng)建線程的方法,它的實(shí)現(xiàn)方法有以下兩種:

  • 創(chuàng)建一個普通的類,繼承 Thread 類,并重寫 run 方法。
  • 使用匿名內(nèi)部類的方式繼承并重寫 run 方法。

具體實(shí)現(xiàn)如下。

1.1 普通類繼承Thread

創(chuàng)建一個普通類,繼承 Thread 并重寫 run 方法,其中 run 方法中的代碼是線程具體要執(zhí)行的業(yè)務(wù)代碼,實(shí)現(xiàn)如下:

// 自定義一個類繼承 Thread 并重寫 run 方法
class MyThread extends Thread {
    @Override
    public void run() {
        // 添加業(yè)務(wù)方法...
    }
}
// 創(chuàng)建線程并執(zhí)行
public class ThreadExample {
    public static void main(String[] args) {
        // 創(chuàng)建線程
        Thread thread = new MyThread();
        // 啟動線程
        thread.start();
    }
}

1.2 匿名內(nèi)部類

上面的寫法有點(diǎn)繁瑣,我們還可以使用以下匿名類的方式來實(shí)現(xiàn):

// 匿名方式創(chuàng)建線程
Thread t1 = new Thread() {
    @Override
    public void run() {
        // 添加業(yè)務(wù)方法...
    }
};
// 啟動線程
t1.start();

1.3 缺點(diǎn)分析

繼承 Thread 類的實(shí)現(xiàn)方法有一個明顯的缺點(diǎn),Java 語言是單繼承的,所以如果繼承了 Thread 類,那就不能再繼承其他類了。

2.實(shí)現(xiàn)Runnable接口

在 Java 語言中,雖然不能多繼承,但可以實(shí)現(xiàn)多個接口。接下來是實(shí)現(xiàn) Runnable 接口的 3 種方法:

  • 創(chuàng)建一個普通類實(shí)現(xiàn) Runnable 接口,并重寫 run 方法。
  • 使用匿名方式創(chuàng)建 Runnable 實(shí)現(xiàn)類,并重寫 run 方法。
  • 使用 Lambda 方式創(chuàng)建匿名 Runnable 實(shí)現(xiàn)類(JDK 8+)。

2.1 普通類實(shí)現(xiàn)Runnable

// 定義一個普通類實(shí)現(xiàn) Runnable 接口
class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 添加業(yè)務(wù)方法...
    }
}
// 線程創(chuàng)建
public static void main(String[] args) {
    // 創(chuàng)建一個 Runnable 實(shí)現(xiàn)類
    MyRunnable myRunnable = new MyRunnable();
    // 創(chuàng)建線程
    Thread thread = new Thread(myRunnable);
    // 啟動線程
    thread.start();
}

2.2 匿名Runnable實(shí)現(xiàn)類

// 匿名 Runnable 實(shí)現(xiàn)類
Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
        // 添加業(yè)務(wù)方法...
    }
});
// 啟動線程
t2.start();

2.3 Lambda創(chuàng)建Runnable

在 JDK 8 之后(包含 JDK 8),我們可以使用 Lambda 表達(dá)式來創(chuàng)建線程,如下代碼所示:

// 使用 Lambda 匿名 Runnable 方式
Thread t3 = new Thread(() -> {
    // 添加業(yè)務(wù)方法...
});
// 啟動線程
t3.start();

從上述代碼可以看出,如果是 JDK 1.8 以上的程序,在不要求獲得線程執(zhí)行結(jié)果的情況下,推薦使用 Lambda 的方式來創(chuàng)建線程,因?yàn)樗膶懛ㄗ銐蚝啙?/strong>。

2.4 缺點(diǎn)分析

以上創(chuàng)建線程的方法,都有一個通用的問題:那就是不能獲得線程的執(zhí)行結(jié)果。

3.使用Callable接口

JDK 1.5 中推出的 Callable 接口,解決了之前不能獲得線程執(zhí)行結(jié)果的尷尬,它的實(shí)現(xiàn)方法有以下兩種:

  • 創(chuàng)建一個普通類實(shí)現(xiàn) Callable 接口,并重寫 call 方法。
  • 使用匿名內(nèi)部類創(chuàng)建 Callable 的實(shí)現(xiàn)類,并重寫 call 方法。

3.1 普通類實(shí)現(xiàn)Callable

// 定義普通實(shí)現(xiàn) Callable 接口,返回一個 Integer 類型的結(jié)果(當(dāng)然也可以返回其他類型的結(jié)果)
class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        // 業(yè)務(wù)實(shí)現(xiàn)代碼...
        return 0;
    }
}
// 創(chuàng)建線程
public static void main(String[] args) throws ExecutionException, InterruptedException {
    // 創(chuàng)建 Callable 普通類
    MyCallable callable = new MyCallable();
    // 使用 FutureTask 用于獲取線程執(zhí)行結(jié)果
    FutureTask<Integer> futureTask = new FutureTask<>(callable);
    // 創(chuàng)建線程
    Thread thread = new Thread(futureTask);
    // 啟動線程
    thread.start();
    // 得到線程執(zhí)行的結(jié)果
    int result = futureTask.get();
}

以上代碼使用 FutureTask + Callable 的方式獲取線程的執(zhí)行結(jié)果,它可以接受任何類型的返回值,我們只需要在創(chuàng)建 Callable 實(shí)現(xiàn)類的時候,定義返回的數(shù)據(jù)類型即可。

3.2 匿名Callable實(shí)現(xiàn)類

// FutureTask 用于獲取線程執(zhí)行結(jié)果
FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
        // 業(yè)務(wù)代碼...
        return 0;
    }
});
// 創(chuàng)建線程
Thread thread = new Thread(futureTask);
// 啟動線程
thread.start();
// 得到線程執(zhí)行的結(jié)果
int result = futureTask.get();

總結(jié)

在 Java 語言中,創(chuàng)建線程有 3 大類實(shí)現(xiàn)方式、7 種實(shí)現(xiàn)方法,如果是 JDK 1.8 以上版本,在不需要獲得線程執(zhí)行結(jié)果的情況下,推薦使用 Lambda 方式來創(chuàng)建線程,因?yàn)樗膶懛ㄗ銐蚝啙?;如果想要獲取線程執(zhí)行結(jié)果,可使用 FutureTask + Callable 的方式來實(shí)現(xiàn)。?

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

相關(guān)文章

  • Zookeeper和Eureka哪個更好?

    Zookeeper和Eureka哪個更好?

    今天小編就為大家分享一篇關(guān)于Zookeeper和Eureka哪個更好?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java中s.charAt(index)用于提取字符串s中的特定字符操作

    Java中s.charAt(index)用于提取字符串s中的特定字符操作

    這篇文章主要介紹了Java中s.charAt(index)用于提取字符串s中的特定字符操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 一文總結(jié)Java獲取文件后綴名的所有方法

    一文總結(jié)Java獲取文件后綴名的所有方法

    Java是一種應(yīng)用廣泛的編程語言,可以通過多種方式來實(shí)現(xiàn)對文件的操作,如文件名后綴、文件擴(kuò)展名等,下面這篇文章主要給大家介紹了關(guān)于Java獲取文件后綴名的所有方法,需要的朋友可以參考下
    2023-05-05
  • java遍歷properties文件操作指南

    java遍歷properties文件操作指南

    在java項(xiàng)目開發(fā)過程中,使用properties文件作為配置基本上是必不可少的,有很多如系統(tǒng)配置信息,java如何遍歷properties文件呢,本文將詳細(xì)介紹,希望可以幫助到您
    2012-11-11
  • java實(shí)現(xiàn)簡單圖書管理系統(tǒng)

    java實(shí)現(xiàn)簡單圖書管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用JavaMail發(fā)送郵件保證成功的方法

    使用JavaMail發(fā)送郵件保證成功的方法

    JavaMail是利用現(xiàn)有的郵件賬戶發(fā)送郵件的工具,使用過JavaMail的api發(fā)送郵件的人可能會有這樣一個疑惑:我如何知道我調(diào)用該api發(fā)送的郵件是否成功呢?那么通過下面這篇文章大家一起來看看使用JavaMail保證郵件發(fā)送成功的方法,有需要的朋友們可以參考借鑒。
    2016-11-11
  • springboot使用定時器@Scheduled不管用的解決

    springboot使用定時器@Scheduled不管用的解決

    這篇文章主要介紹了springboot使用定時器@Scheduled不管用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java常用注解擴(kuò)展對比舉例詳解

    Java常用注解擴(kuò)展對比舉例詳解

    這篇文章主要介紹了Java常用注解擴(kuò)展對比的相關(guān)資料,提供了豐富的代碼示例,并總結(jié)了最佳實(shí)踐建議,幫助開發(fā)者更好地理解和應(yīng)用這些注解,需要的朋友可以參考下
    2025-03-03
  • 一文教你搞定Java Optional類判空操作

    一文教你搞定Java Optional類判空操作

    有時項(xiàng)目組內(nèi)做code review,會充斥著大量的、原始的、丑陋的判空語句。讓整體的代碼顯得十分的臃腫龐大丑陋,那么怎么辦呢?利用Optional這個jdk8中引入的類就可以優(yōu)雅的處理,現(xiàn)在我們來詳細(xì)講解下這個類的使用和源碼
    2022-10-10
  • Springboot中的三個基本架構(gòu)

    Springboot中的三個基本架構(gòu)

    這篇文章主要介紹了Springboot中的三個基本架構(gòu),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

永靖县| 滦南县| 格尔木市| 荆州市| 临朐县| 东安县| 临颍县| 永年县| 彰化县| 临西县| 荔波县| 富源县| 柳林县| 新蔡县| 阜康市| 龙泉市| 临汾市| 拜泉县| 武平县| 绥德县| 博野县| 凤冈县| 和硕县| 郴州市| 泸州市| 定陶县| 德州市| 株洲县| 南平市| 漳平市| 额尔古纳市| 阿拉善左旗| 翼城县| 阿合奇县| 普格县| 辽宁省| 佛学| 合川市| 娱乐| 霍山县| 鄄城县|