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

Java Thread中start()和run()的區(qū)別_動力節(jié)點Java學(xué)院整理

 更新時間:2017年05月25日 10:34:11   投稿:mrr  
start() : 它的作用是啟動一個新線程,新線程會執(zhí)行相應(yīng)的run()方法。start()不能被重復(fù)調(diào)用。而run() : run()就和普通的成員方法一樣,可以被重復(fù)調(diào)用。下面通過示例代碼給大家介紹了Java Thread中start()和run()的區(qū)別,感興趣的朋友一起看看吧

start() 和 run()的區(qū)別說明

start() : 它的作用是啟動一個新線程,新線程會執(zhí)行相應(yīng)的run()方法。start()不能被重復(fù)調(diào)用。

run()   : run()就和普通的成員方法一樣,可以被重復(fù)調(diào)用。單獨調(diào)用run()的話,會在當(dāng)前線程中執(zhí)行run(),而并不會啟動新線程!

下面以代碼來進(jìn)行說明。

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

mythread.start()會啟動一個新線程,并在新線程中運行run()方法。

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

start() 和 run()的區(qū)別示例

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

 // Demo.java 的源碼
 class MyThread extends Thread{ 
   public MyThread(String name) {
     super(name);
   }
   public void run(){
     System.out.println(Thread.currentThread().getName()+" is running");
   } 
 }; 
 public class Demo { 
   public static void main(String[] args) { 
     Thread mythread=new MyThread("mythread");
     System.out.println(Thread.currentThread().getName()+" call mythread.run()");
     mythread.run();
     System.out.println(Thread.currentThread().getName()+" call mythread.start()");
     mythread.start();
   } 
 }

運行結(jié)果:

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

結(jié)果說明:

(01) Thread.currentThread().getName()是用于獲取“當(dāng)前線程”的名字。當(dāng)前線程是指正在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()方法的源碼如下: 

public synchronized void start() {
  // 如果線程不是"就緒狀態(tài)",則拋出異常!
  if (threadStatus != 0)
    throw new IllegalThreadStateException();
  // 將線程添加到ThreadGroup中
  group.add(this);
  boolean started = false;
  try {
    // 通過start0()啟動線程
    start0();
    // 設(shè)置started標(biāo)記
    started = true;
  } finally {
    try {
      if (!started) {
        group.threadStartFailed(this);
      }
    } catch (Throwable ignore) {
    }
  }
}

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

private native void start0(); 

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

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

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

以上所述是小編給大家介紹的Java Thread中start()和run()的區(qū)別_動力節(jié)點Java學(xué)院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java字符串?dāng)?shù)字左右補全0的四種方式

    Java字符串?dāng)?shù)字左右補全0的四種方式

    這篇文章主要給大家介紹了關(guān)于Java字符串?dāng)?shù)字左右補全0的四種方式,在編程中有時候我們需要對一個字符串進(jìn)行字符填充,以滿足某些特定的要求,其中補全0是一種常見的需求,需要的朋友可以參考下
    2023-08-08
  • Alibaba?Nacos配置中心動態(tài)感知原理示例解析

    Alibaba?Nacos配置中心動態(tài)感知原理示例解析

    這篇文章主要介紹了Alibaba?Nacos配置中心動態(tài)感知原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • java中使用@Transactional會有哪些坑

    java中使用@Transactional會有哪些坑

    在Java中,@Transactional是一個常用的注解,用于聲明方法應(yīng)該在一個事務(wù)的上下文中執(zhí)行,本文主要介紹了java中使用@Transactional會有哪些坑,感興趣的可以了解一下
    2024-04-04
  • java、spring、springboot中整合Redis的詳細(xì)講解

    java、spring、springboot中整合Redis的詳細(xì)講解

    這篇文章主要介紹了java、spring、springboot中整合Redis的詳細(xì)講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java使用Geodesy進(jìn)行地理計算的技術(shù)指南

    Java使用Geodesy進(jìn)行地理計算的技術(shù)指南

    在地理信息系統(tǒng) (GIS) 和導(dǎo)航應(yīng)用中,精確的地理計算是基礎(chǔ),Geodesy 是一個流行的 Java 庫,用于處理地理位置、距離、方向等相關(guān)計算,本博客將介紹 Geodesy 的核心功能,并提供詳細(xì)的實踐樣例,幫助開發(fā)者快速上手,需要的朋友可以參考下
    2025-02-02
  • JpaRepository?實現(xiàn)簡單條件查詢

    JpaRepository?實現(xiàn)簡單條件查詢

    這篇文章主要介紹了JpaRepository?實現(xiàn)簡單條件查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 如何在Spring?Boot框架中使用攔截器實現(xiàn)URL限制

    如何在Spring?Boot框架中使用攔截器實現(xiàn)URL限制

    在Spring?Boot框架中,您可以使用攔截器(Interceptor)來控制限制URL列表,本文通過一個簡單的示例給大家介紹Spring?Boot?攔截器實現(xiàn)URL限制的操作方法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • Java利用Redis實現(xiàn)消息隊列的示例代碼

    Java利用Redis實現(xiàn)消息隊列的示例代碼

    本篇文章主要介紹了Java利用Redis實現(xiàn)消息隊列的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Springboot如何添加server.servlet.context-path相關(guān)使用

    Springboot如何添加server.servlet.context-path相關(guān)使用

    這篇文章主要介紹了Springboot如何添加server.servlet.context-path相關(guān)使用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • spring-boot使用Admin監(jiān)控應(yīng)用的方法

    spring-boot使用Admin監(jiān)控應(yīng)用的方法

    本篇文章主要介紹了spring-boot使用Admin監(jiān)控應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

塘沽区| 潜山县| 华宁县| 宝鸡市| 祁阳县| 鹤庆县| 察雅县| 屏边| 花莲市| 出国| 长白| 巴青县| 深州市| 宣威市| 靖西县| 宜丰县| 大余县| 岢岚县| 紫阳县| 平武县| 永泰县| 香河县| 尼玛县| 化德县| 庄浪县| 沂源县| 达拉特旗| 灵台县| 郧西县| 延庆县| 桂阳县| 元朗区| 克山县| 湛江市| 千阳县| 绥滨县| 桂阳县| 紫阳县| 麦盖提县| 沙坪坝区| 文化|