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

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

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

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

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

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

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

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

mythread.start()會(huì)啟動(dòng)一個(gè)新線程,并在新線程中運(yùn)行run()方法。

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

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

下面,通過一個(gè)簡單示例演示它們之間的區(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();
   } 
 }

運(yùn)行結(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()方法直接運(yùn)行在“主線程main”上。

(03) mythread.start()會(huì)啟動(dòng)“線程mythread”,“線程mythread”啟動(dòng)之后,會(huì)調(diào)用run()方法;此時(shí)的run()方法是運(yùn)行在“線程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()啟動(dòng)線程
    start0();
    // 設(shè)置started標(biāo)記
    started = true;
  } finally {
    try {
      if (!started) {
        group.threadStartFailed(this);
      }
    } catch (Throwable ignore) {
    }
  }
}

說明:start()實(shí)際上是通過本地方法start0()啟動(dòng)線程的。而start0()會(huì)新運(yùn)行一個(gè)線程,新線程會(huì)調(diào)用run()方法。

private native void start0(); 

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

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

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

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

相關(guān)文章

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

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

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

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

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

    java中使用@Transactional會(huì)有哪些坑

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

偃师市| 望江县| 平安县| 金湖县| 叶城县| 江孜县| 禄丰县| 枞阳县| 阿合奇县| 集安市| 漳平市| 海城市| 临清市| 循化| 贺州市| 阿拉善盟| 阳西县| 出国| 孝义市| 日照市| 桂东县| 务川| 长丰县| 宜黄县| 额尔古纳市| 察雅县| 临潭县| 恩施市| 镇宁| 稻城县| 汉川市| 溧水县| 玉溪市| 承德市| 商洛市| 洪泽县| 扶绥县| 公主岭市| 黔西县| 柏乡县| 牙克石市|