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

java基本教程之Thread中start()和run()的區(qū)別 java多線程教程

 更新時間:2014年01月14日 09:55:34   作者:  
這篇文章主要介紹了Thread中start()和run()的區(qū)別,Thread類包含start()和run()方法,它們的區(qū)別是什么?下面將對此作出解答

Thread類包含start()和run()方法,它們的區(qū)別是什么?本章將對此作出解答。本章內(nèi)容包括:
start() 和 run()的區(qū)別說明
start() 和 run()的區(qū)別示例
start() 和 run()相關(guān)源碼(基于JDK1.7.0_40)

start() 和 run()的區(qū)別說明
start() : 它的作用是啟動一個新線程,新線程會執(zhí)行相應(yīng)的run()方法。start()不能被重復(fù)調(diào)用。
run()   : run()就和普通的成員方法一樣,可以被重復(fù)調(diào)用。單獨調(diào)用run()的話,會在當前線程中執(zhí)行run(),而并不會啟動新線程!

 

下面以代碼來進行說明。

復(fù)制代碼 代碼如下:

class MyThread extends Thread{ 
    public void run(){
        ...
    }
};
MyThread mythread = new MyThread();

mythread.start()會啟動一個新線程,并在新線程中運行run()方法。
而mythread.run()則會直接在當前線程中運行run()方法,并不會啟動一個新線程來運行run()。

 

start() 和 run()的區(qū)別示例
下面,通過一個簡單示例演示它們之間的區(qū)別。源碼如下:

復(fù)制代碼 代碼如下:

public synchronized void start() {
    // 如果線程不是"就緒狀態(tài)",則拋出異常!
    if (threadStatus != 0)
        throw new IllegalThreadStateException();

    // 將線程添加到ThreadGroup中
    group.add(this);

    boolean started = false;
    try {
        // 通過start0()啟動線程
        start0();
        // 設(shè)置started標記
        started = true;
    } finally {
        try {
            if (!started) {
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
        }
    }
}

運行結(jié)果:

復(fù)制代碼 代碼如下:

main call mythread.run()
main is running
main call mythread.start()
mythread is running

結(jié)果說明:
(01) Thread.currentThread().getName()是用于獲取“當前線程”的名字。當前線程是指正在cpu中調(diào)度執(zhí)行的線程。
(02) mythread.run()是在“主線程main”中調(diào)用的,該run()方法直接運行在“主線程main”上。
(03) mythread.start()會啟動“線程mythread”,“線程mythread”啟動之后,會調(diào)用run()方法;此時的run()方法是運行在“線程mythread”上。

 

start() 和 run()相關(guān)源碼(基于JDK1.7.0_40)
Thread.java中start()方法的源碼如下:

復(fù)制代碼 代碼如下:

public synchronized void start() {
    // 如果線程不是"就緒狀態(tài)",則拋出異常!
    if (threadStatus != 0)
        throw new IllegalThreadStateException();

    // 將線程添加到ThreadGroup中
    group.add(this);

    boolean started = false;
    try {
        // 通過start0()啟動線程
        start0();
        // 設(shè)置started標記
        started = true;
    } finally {
        try {
            if (!started) {
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {
        }
    }
}

說明:start()實際上是通過本地方法start0()啟動線程的。而start0()會新運行一個線程,新線程會調(diào)用run()方法。

復(fù)制代碼 代碼如下:

private native void start0();


Thread.java中run()的代碼如下:

復(fù)制代碼 代碼如下:

public void run() {
    if (target != null) {
        target.run();
    }
}

說明:target是一個Runnable對象。run()就是直接調(diào)用Thread線程的Runnable成員的run()方法,并不會新建一個線程。

相關(guān)文章

  • Java gbk轉(zhuǎn)utf-8

    Java gbk轉(zhuǎn)utf-8

    本文主要介紹了Java gbk轉(zhuǎn)utf-8的方法,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • java實現(xiàn)文件的斷點續(xù)傳

    java實現(xiàn)文件的斷點續(xù)傳

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件的斷點續(xù)傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java基礎(chǔ)之this關(guān)鍵字的使用

    Java基礎(chǔ)之this關(guān)鍵字的使用

    今天給大家?guī)淼氖顷P(guān)于Java基礎(chǔ)的相關(guān)知識,文章圍繞著this關(guān)鍵字的使用展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 你知道Spring中為何不建議使用字段注入嗎

    你知道Spring中為何不建議使用字段注入嗎

    這篇文章主要給大家介紹了關(guān)于Spring中為何不建議使用字段注入的相關(guān)資料,通過本文你將對Spring的引入方式有更一步的了解,需要的朋友可以參考下
    2021-08-08
  • java8新特性之Optional的深入解析

    java8新特性之Optional的深入解析

    這篇文章主要給大家介紹了關(guān)于java8新特性之Optional的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Java深入探索單例模式的應(yīng)用

    Java深入探索單例模式的應(yīng)用

    單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式
    2022-06-06
  • SpringBoot整合InfluxDB的詳細過程

    SpringBoot整合InfluxDB的詳細過程

    InfluxDB是一個開源的時間序列數(shù)據(jù)庫,由Go語言編寫,適用于存儲和查詢按時間順序產(chǎn)生的數(shù)據(jù),它具有高效的數(shù)據(jù)存儲和查詢機制,支持高并發(fā)寫入和查詢,靈活的數(shù)據(jù)模型和強大的查詢語言,本文介紹SpringBoot整合InfluxDB的詳細過程,感興趣的朋友一起看看吧
    2024-12-12
  • Java多線程之讀寫鎖分離設(shè)計模式

    Java多線程之讀寫鎖分離設(shè)計模式

    這篇文章主要介紹了Java多線程讀寫鎖分離設(shè)計模式,主要利用Java到嗎完成read read 并行化、read write 不允許、write write 不允許幾項任務(wù),需要的朋友可以參考一下
    2021-10-10
  • java接口私有方法實現(xiàn)過程解析

    java接口私有方法實現(xiàn)過程解析

    這篇文章主要介紹了java接口私有方法實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java基礎(chǔ)--反射機制

    Java基礎(chǔ)--反射機制

    本文主要介紹了Java反射機制的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03

最新評論

仙游县| 城口县| 墨竹工卡县| 西贡区| 农安县| 马山县| 鄂托克前旗| 洮南市| 阆中市| 依安县| 册亨县| 安康市| 新巴尔虎左旗| 巨鹿县| 梅州市| 临猗县| 曲阳县| 安国市| 邯郸市| 涿州市| 灵台县| 任丘市| 麻栗坡县| SHOW| 合水县| 枣阳市| 沙坪坝区| 乳山市| 晋州市| 万源市| 嘉定区| 镇原县| 淮北市| 莱芜市| 吴忠市| 临武县| 丹寨县| 葫芦岛市| 中山市| 静海县| 房产|