欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線(xiàn)程的新建和就緒狀態(tài)實(shí)例分析

 更新時(shí)間:2019年09月12日 10:39:00   作者:cakincqm  
這篇文章主要介紹了Java線(xiàn)程的新建和就緒狀態(tài),結(jié)合實(shí)例形式分析了java線(xiàn)程的創(chuàng)建、調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java線(xiàn)程的新建和就緒狀態(tài)。分享給大家供大家參考,具體如下:

一 點(diǎn)睛

當(dāng)線(xiàn)程被創(chuàng)建啟動(dòng)以后,它既不是一啟動(dòng)就進(jìn)入執(zhí)行狀態(tài),也不是一直處于執(zhí)行狀態(tài),在線(xiàn)程的生命周期中,它要經(jīng)過(guò)新建、就緒、運(yùn)行、阻塞和死亡5種狀態(tài)。當(dāng)線(xiàn)程啟動(dòng)后,它不可能一直霸占CPU獨(dú)自運(yùn)行,所以CPU需要在多個(gè)線(xiàn)程之間切換,于是線(xiàn)程狀態(tài)也會(huì)多次在運(yùn)行和就緒之間切換。

當(dāng)程序使用new關(guān)鍵字創(chuàng)建一個(gè)線(xiàn)程后,該線(xiàn)程就處于新建狀態(tài)。

當(dāng)線(xiàn)程對(duì)象調(diào)用start()方法之后,該線(xiàn)程就處于就緒狀態(tài),處于這個(gè)狀態(tài)的線(xiàn)程并沒(méi)有開(kāi)始運(yùn)行,只是表示該線(xiàn)程可以運(yùn)行了。至于該線(xiàn)程何時(shí)開(kāi)始運(yùn)行,取決于JVM里線(xiàn)程調(diào)度器的調(diào)度。

自動(dòng)線(xiàn)程使用start()方法,而不是run()方法,永遠(yuǎn)不要調(diào)用線(xiàn)程對(duì)象的run()方法。否則系統(tǒng)把線(xiàn)程對(duì)象當(dāng)作一個(gè)普通對(duì)象,而run()方法也是一個(gè)普通方法,而不是線(xiàn)程執(zhí)行體。

二 代碼

public class InvokeRun extends Thread
{
   private int i ;
   // 重寫(xiě)run方法,run方法的方法體就是線(xiàn)程執(zhí)行體
   public void run()
   {
      for ( ; i < 100 ; i++ )
      {
        // 直接調(diào)用run方法時(shí),Thread的this.getName返回的是該對(duì)象名字,
        // 而不是當(dāng)前線(xiàn)程的名字。
        // 使用Thread.currentThread().getName()總是獲取當(dāng)前線(xiàn)程名字
        System.out.println(Thread.currentThread().getName()
           + " " + i);  // ①
      }
   }
   public static void main(String[] args)
   {
      for (int i = 0; i < 100; i++)
      {
        // 調(diào)用Thread的currentThread方法獲取當(dāng)前線(xiàn)程
        System.out.println(Thread.currentThread().getName()
           + " " + i);
        if (i == 20)
        {
           // 直接調(diào)用線(xiàn)程對(duì)象的run方法,
           // 系統(tǒng)會(huì)把線(xiàn)程對(duì)象當(dāng)成普通對(duì)象,run方法當(dāng)成普通方法,
           // 所以下面兩行代碼并不會(huì)啟動(dòng)兩條線(xiàn)程,而是依次執(zhí)行兩個(gè)run方法
           new InvokeRun().run();
           new InvokeRun().run();
        }
      }
   }
}

三 運(yùn)行

......
main 93
main 94
main 95
main 96
main 97
main 98
main 99
main 0
main 1
main 2
main 3
main 4
main 5
......

四 說(shuō)明

上面程序創(chuàng)建對(duì)象后直接調(diào)用了線(xiàn)程對(duì)象的run()方法,程序的運(yùn)行結(jié)果是整個(gè)程序只有一個(gè)線(xiàn)程:主線(xiàn)程。

如果直接調(diào)用線(xiàn)程對(duì)象的run()方法,則run()方法里不能直接通過(guò)getName()方法來(lái)獲得當(dāng)前執(zhí)行線(xiàn)程的名字,而是需要使用Thread.currentThread()方法先獲得當(dāng)前線(xiàn)程,再調(diào)用線(xiàn)程對(duì)象的getName()方法來(lái)獲得線(xiàn)程的名字。

啟動(dòng)線(xiàn)程的正確方法是調(diào)用Thread對(duì)象的start()方法,而不是直接調(diào)用run()方法,否則就會(huì)變成單線(xiàn)程程序。

調(diào)用了run()方法之后,該線(xiàn)程已經(jīng)不再處于新建狀態(tài),不要再次調(diào)用線(xiàn)程對(duì)象的start()方法。

只能對(duì)處于新建狀態(tài)的線(xiàn)程調(diào)用start()方法,否則會(huì)引發(fā)異常。

如果希望調(diào)用子線(xiàn)程的start()方法后子線(xiàn)程立即開(kāi)始執(zhí)行,程序可以使用Thread.sleep(1)來(lái)讓當(dāng)前運(yùn)行的線(xiàn)程(主線(xiàn)程)睡眠1毫秒,因?yàn)?毫秒內(nèi)CPU不會(huì)空閑,它會(huì)去執(zhí)行另一個(gè)處于就緒狀態(tài)的線(xiàn)程,這樣就可以讓子線(xiàn)程立即開(kāi)始執(zhí)行。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java進(jìn)程與線(xiàn)程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java中Integer.valueOf,parsetInt() String.valueOf的區(qū)別和結(jié)果代碼解析

    Java中Integer.valueOf,parsetInt() String.valueOf的區(qū)別和結(jié)果代碼解析

    本文通過(guò)代碼給大家講解了JAVA中Integer.valueOf, parsetInt() String.valueOf的區(qū)別和結(jié)果,需要的朋友可以參考下
    2018-05-05
  • SpringBoot整合第三方技術(shù)的實(shí)現(xiàn)

    SpringBoot整合第三方技術(shù)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot整合第三方技術(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Java ScheduledExecutorService的具體使用

    Java ScheduledExecutorService的具體使用

    ScheduledExecutorService有線(xiàn)程池的特性,也可以實(shí)現(xiàn)任務(wù)循環(huán)執(zhí)行,本文主要介紹了Java ScheduledExecutorService的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • 關(guān)于Kafka消息隊(duì)列原理的總結(jié)

    關(guān)于Kafka消息隊(duì)列原理的總結(jié)

    這篇文章主要介紹了關(guān)于Kafka消息隊(duì)列原理的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringBoot實(shí)現(xiàn)指標(biāo)監(jiān)控

    SpringBoot實(shí)現(xiàn)指標(biāo)監(jiān)控

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)指標(biāo)監(jiān)控方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot整合Redis、ApachSolr和SpringSession的示例

    SpringBoot整合Redis、ApachSolr和SpringSession的示例

    本篇文章主要介紹了SpringBoot整合Redis、ApachSolr和SpringSession的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Java if(boolean)和if(boolean=true)區(qū)別解析

    Java if(boolean)和if(boolean=true)區(qū)別解析

    這篇文章主要介紹了Java if(boolean)和if(boolean=true)區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java實(shí)現(xiàn)讀取163郵箱,qq郵箱的郵件內(nèi)容

    Java實(shí)現(xiàn)讀取163郵箱,qq郵箱的郵件內(nèi)容

    這篇文章主要利用Java語(yǔ)言實(shí)現(xiàn)讀取163郵箱和qq郵箱的郵件內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試
    2022-02-02
  • springboot web項(xiàng)目打jar或者war包并運(yùn)行的實(shí)現(xiàn)

    springboot web項(xiàng)目打jar或者war包并運(yùn)行的實(shí)現(xiàn)

    這篇文章主要介紹了springboot web項(xiàng)目打jar或者war包并運(yùn)行的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java中保留兩位小數(shù)的四種方法實(shí)現(xiàn)實(shí)例

    Java中保留兩位小數(shù)的四種方法實(shí)現(xiàn)實(shí)例

    今天小編就為大家分享一篇關(guān)于Java中保留兩位小數(shù)的四種方法實(shí)現(xiàn)實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02

最新評(píng)論