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

Java中Thread和Runnable創(chuàng)建線程的方式對比

 更新時間:2022年07月04日 11:24:30   作者:i進擊的攻城獅  
本文主要介紹了Java中Thread和Runnable創(chuàng)建線程的方式對比,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、通過繼承Thread創(chuàng)建線程

通過繼承Thread類,創(chuàng)建一個線程,在主線程中,調(diào)用start,讓線程處于runnable狀態(tài),讓系統(tǒng)去運行線程的方法。

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("執(zhí)行線程");
    }
}
public class ThreadTest {

    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();
    }
}

二、實現(xiàn)Runnable創(chuàng)建檢查

通過實現(xiàn)runnable接口,創(chuàng)建一個線程,需要把runnable的實現(xiàn)類,作為Thread的構(gòu)造方法的參數(shù),運行這個線程。

public class MyThread implements Runnable {
    @Override
    public void run() {
        System.out.println("執(zhí)行線程");
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        Runnable thread = new MyThread();
        Thread thread1 = new Thread(thread);
        thread1.start();

    }
}

這里要注意一些,runnable的實現(xiàn)類,是沒有start()方法的,只有run()方法

如果運行這個run方法,依然能運行線程的方法,但是,這個方法并不是在新的線程中運行的,而是在主線程中運行的。

public class MyThread implements Runnable {
    @Override
    public void run() {
        System.out.println("此方法在:"+Thread.currentThread().getName()+"中運行");
    }
}


public class ThreadTest {

    public static void main(String[] args) {
        Runnable run = new MyThread();
        System.out.println("此方法在:"+Thread.currentThread().getName()+"中執(zhí)行");
        run.run();
//        Thread thread1 = new Thread(run);
//        thread1.start();

    }
}

運行結(jié)果:

如果把注釋打開,run()注釋掉,結(jié)果如下:

三、比較兩種創(chuàng)建方式

3.1、多繼承

Java是不支持類的多繼承的,但是支持接口的多實現(xiàn),所以Runnable在使用上更加靈活。

3.2、 數(shù)據(jù)共享

如果一個類繼承Thread,則不適合資源共享。但是如果實現(xiàn)了Runable接口的話,則很容易的實現(xiàn)資源共享。
如果線程中有一個成員變量,使用Runnable創(chuàng)建的線程,多個線程之間可以共同訪問這個變量,而Thread不可以。

為什么呢?一個Thread創(chuàng)建的線程,每次都是new的一個新的線程對象,線程對象之間的成員變量不共享。而Runnale,可以作為Thread類的參數(shù),可以多創(chuàng)建幾個Thread類,把Runnale作為參數(shù),讓多個線程一起運行。

public class ThreadTest {

    public static void main(String[] args) {
        Runnable run = new MyThread();
        Thread thread1 = new Thread(run);
        Thread thread2 = new Thread(run);
        Thread thread3 = new Thread(run);
        thread1.start();
        thread2.start();
        thread3.start();
    }
}

3.3、線程池

線程池只能放入實現(xiàn)Runable或callable類線程,不能直接放入繼承Thread的類。

四、源碼分析

當我們進入Thread方法,可以看的Thread也實現(xiàn)了Runnable接口

使用Thread肯定也實現(xiàn)了他的run方法。

可以看出,在這個run方法中,如果target不為空,執(zhí)行target的run方法,那target是什么?

進入后,發(fā)現(xiàn)是runnable接口,那它是如何初始化的?突然想起,執(zhí)行runnable的實現(xiàn)類時,都會把他通過構(gòu)造函數(shù)傳遞,那來看看構(gòu)造函數(shù)。

繼續(xù)往下,可以看出確實是在這里初始化的。

所以,Runnbale接口的run方法,是通過Thread的成員變量去執(zhí)行的。

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

相關(guān)文章

  • Spring boot 集成 Druid 數(shù)據(jù)源過程詳解

    Spring boot 集成 Druid 數(shù)據(jù)源過程詳解

    這篇文章主要介紹了Spring boot 集成 Druid 數(shù)據(jù)源過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Gradle修改本地倉庫的位置方法實現(xiàn)

    Gradle修改本地倉庫的位置方法實現(xiàn)

    這篇文章主要介紹了Gradle修改本地倉庫的位置方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 14個編寫Spring MVC控制器的實用小技巧(吐血整理)

    14個編寫Spring MVC控制器的實用小技巧(吐血整理)

    這篇文章主要介紹了14個編寫Spring MVC控制器的實用小技巧(吐血整理),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Java編程通過匹配合并數(shù)據(jù)實例解析(數(shù)據(jù)預處理)

    Java編程通過匹配合并數(shù)據(jù)實例解析(數(shù)據(jù)預處理)

    這篇文章主要介紹了Java編程通過匹配合并數(shù)據(jù)實例解析(數(shù)據(jù)預處理),分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java操作Zookeeper原理及過程詳解

    Java操作Zookeeper原理及過程詳解

    這篇文章主要介紹了Java操作Zookeeper原理及過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java.SE數(shù)組的一些常見練習題

    Java.SE數(shù)組的一些常見練習題

    數(shù)組可以看成是相同類型元素的一個集合,在內(nèi)存中是一段連續(xù)的空間,這篇文章主要給大家介紹了關(guān)于Java.SE數(shù)組的一些常見練習題,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • jdk21環(huán)境配置詳細步驟記錄

    jdk21環(huán)境配置詳細步驟記錄

    JDK是整個Java開發(fā)的核心,它包含了Java的運行環(huán)境和Java工具,這篇文章主要給大家介紹了關(guān)于jdk21環(huán)境配置的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Java輸入/輸出流體系詳解

    Java輸入/輸出流體系詳解

    這篇文章主要介紹了Java輸入/輸出流體系詳解,涉及字節(jié)流和字符流,輸入輸出體系,轉(zhuǎn)換流,以及文件的讀寫等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java實現(xiàn)圖片上插入文字并保存

    java實現(xiàn)圖片上插入文字并保存

    這篇文章主要為大家詳細介紹了java實現(xiàn)圖片上插入文字并保存,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 基于Java網(wǎng)絡(luò)編程和多線程的多對多聊天系統(tǒng)

    基于Java網(wǎng)絡(luò)編程和多線程的多對多聊天系統(tǒng)

    這篇文章主要介紹了基于Java網(wǎng)絡(luò)編程和多線程的多對多聊天系統(tǒng),文中有非常詳細的代碼示例,對正在學習java網(wǎng)絡(luò)編程的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論

天水市| 江达县| 贡嘎县| 临邑县| 莱州市| 万盛区| 老河口市| 新郑市| 德州市| 济源市| 邵武市| 东乡| 郎溪县| 长葛市| 大理市| 阳曲县| 祁连县| 峨边| 泸溪县| 和龙市| 永宁县| 收藏| 寿光市| 安阳市| 涟水县| 苗栗市| 大庆市| 邯郸县| 南开区| 阳春市| 石首市| 前郭尔| 丹东市| 博湖县| 嘉鱼县| 绥中县| 龙井市| 洛阳市| 永春县| 蚌埠市| 庆安县|