国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JAVA深化篇_29—— 線程使用之線程聯(lián)合以及Thread類中的其他常用方法【附有詳細說明及代碼案例】

這篇具有很好參考價值的文章主要介紹了JAVA深化篇_29—— 線程使用之線程聯(lián)合以及Thread類中的其他常用方法【附有詳細說明及代碼案例】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

線程聯(lián)合

當前線程邀請調(diào)用方法的線程優(yōu)先執(zhí)行,在調(diào)用方法的線程執(zhí)行結(jié)束之前,當前線程不能再次執(zhí)行。線程A在運行期間,可以調(diào)用線程B的join()方法,讓線程B和線程A聯(lián)合。這樣,線程A就必須等待線程B執(zhí)行完畢后,才能繼續(xù)執(zhí)行。

join方法的使用

join()方法就是指調(diào)用該方法的線程在執(zhí)行完run()方法后,再執(zhí)行join方法后面的代碼,即將兩個線程合并,用于實現(xiàn)同步控制。

class A implements Runnable{
  private Thread b;
  public A(Thread b){
    this.b = b;
   }


  @Override
  public void run() {
    for(int i=0;i<10;i++){
      System.out.println(Thread.currentThread().getName()+"  A  "+i);
      if(i == 5){
        try {
          this.b.join();
         } catch (InterruptedException e) {
          e.printStackTrace();
         }
       }
      try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
     }
   }
}


class B implements Runnable{
  @Override
  public void run() {
    for(int i=0;i<20;i++){
      System.out.println(Thread.currentThread().getName()+" B "+i);
      try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
     }
   }
}


public class TestJoinThread {
  public static void main(String[] args) {
    Thread t1 = new Thread(new B());
    Thread t = new Thread(new A(t1));


    t.start();
    t1.start();
    for(int i=0;i<10;i++){
      System.out.println(Thread.currentThread().getName()+" "+i);
      if(i ==2){
        try {
          t.join();
         } catch (InterruptedException e) {
          e.printStackTrace();
         }
       }
      try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
     }
   }
}

線程聯(lián)合案例

需求:

實現(xiàn)爸爸讓兒子買煙。

/**
 * 兒子買煙線程
 */
class SonThread implements Runnable{


  @Override
  public void run() {
    System.out.println("兒子出門買煙");
    System.out.println("兒子買煙需要10分鐘");
    for(int i=0;i<10;i++){
      System.out.println("第"+i+"分鐘");
      try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
     }
    System.out.println("兒子買煙回來了");
   }
}


/**
 * 爸爸抽煙線程
 */
class FatherThread implements Runnable{


  @Override
  public void run() {
    System.out.println("爸爸想抽煙,發(fā)現(xiàn)煙抽完了");
    System.out.println("爸爸讓兒子去買一包紅塔山");
    Thread t = new Thread(new SonThread());
    t.start();
    System.out.println("等待兒子買煙回來");
    try {
      t.join();
     } catch (InterruptedException e) {
      e.printStackTrace();
      System.out.println("爸爸出門找兒子");
      System.exit(1);
     }
    System.out.println("爸爸高興的接過煙,并把零錢給了兒子");
   }
}


public class TestJoinDemo {
  public static void main(String[] args) {
    System.out.println("爸爸和兒子買煙的故事");
    Thread t = new Thread(new FatherThread());
    t.start();
   }
}


Thread類中的其他常用方法

獲取線程名稱getName()
方式一

this.getName()獲取線程名稱,該方法適用于繼承Thread實現(xiàn)多線程方式。

class GetName1 extends Thread{
  @Override
  public void run() {
    System.out.println(this.getName());
   }
}

方式二

Thread.currentThread().getName()獲取線程名稱,該方法適用于實現(xiàn)Runnable接口實現(xiàn)多線程方式。

class GetName2 implements Runnable{


  @Override
  public void run() {
    System.out.println(Thread.currentThread().getName());
   }
}

設(shè)置線程的名稱setName()
方式一

通過構(gòu)造方法設(shè)置線程名稱。

class SetName1 extends Thread{
  public SetName1(String name){
    super(name);
   }
  @Override
  public void run() {
    System.out.println(this.getName());
   }
}


public class SetNameThread {
  public static void main(String[] args) {
    SetName1 setName1 = new SetName1("SetName1");
    setName1.start();
   }
}

方式二

通過setName()方法設(shè)置線程名稱。

class SetName2 implements Runnable{


  @Override
  public void run() {
    System.out.println(Thread.currentThread().getName());
   }
}
public class SetNameThread {
  public static void main(String[] args) {
    Thread thread = new Thread(new SetName2());
    thread.setName("SetName2");
    thread.start();
   }
}

判斷線程是否存活isAlive()

isAlive()方法: 判斷當前的線程是否處于活動狀態(tài)。

活動狀態(tài)是指線程已經(jīng)啟動且尚未終止,線程處于正在運行或準備開始運行的狀態(tài),就認為線程是存活的。文章來源地址http://www.zghlxwxcb.cn/news/detail-745291.html

class Alive implements Runnable{


  @Override
  public void run() {
    for(int i=0;i<4;i++){
      System.out.println(Thread.currentThread().getName()+" "+i);
      try {
        Thread.sleep(500);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
     }
   }
}


public class TestAliveThread {
  public static void main(String[] args) {
    Thread thread = new Thread(new Alive());
    thread.setName("Alive");
    thread.start();
    System.out.println(thread.getName()+" "+thread.isAlive());
    try {
      Thread.sleep(4000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    System.out.println(thread.getName()+" "+thread.isAlive());
   }
}

到了這里,關(guān)于JAVA深化篇_29—— 線程使用之線程聯(lián)合以及Thread類中的其他常用方法【附有詳細說明及代碼案例】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JVM源碼剖析之Thread類中sleep方法

    版本信息: jdk版本:jdk8u40 大部分的Java程序員知道讓線程睡眠的方法是Thread.sleep方法,而這個方法是一個native方法,讓很多想知道底層如何讓線程睡眠的程序員望而卻步。所以筆者特意寫在這篇文章,帶各位讀者剖析一下Thread.sleep方法背后的神秘。 話不多說,先從Java層面看

    2024年02月07日
    瀏覽(16)
  • thread類中構(gòu)造的函數(shù)參數(shù)必須是可拷貝的

    錯誤代碼 這段代碼會導致編譯錯誤,因為在C++中,如果你嘗試在線程(std::thread)中傳遞參數(shù),那么這些參數(shù)必須是可拷貝的,或者你需要使用 std::ref 來傳遞可引用的參數(shù)。 在你的代碼中,你嘗試在線程中傳遞一個整數(shù) 3 和一個 std::string 引用 s,這是不允許的,因為 std::t

    2024年02月06日
    瀏覽(22)
  • Java 線程池(Thread Pools)詳解

    Java 線程池(Thread Pools)詳解

    目錄 1、線程池介紹 2、線程池執(zhí)行原理 3、線程池中的阻塞隊列 4、Java 線程池中的拒絕策略 5、Java 提供的創(chuàng)建線程池的方式 6、線程池的使用示例 7、ForkJoinPool 和 ThreadPool 的區(qū)別 1、線程池介紹 ???????? 線程池是一種重用線程的機制 ,用于提高線程的利用率和管理線程的

    2024年02月05日
    瀏覽(28)
  • Java多線程 -Thread類的常用API

    Thread常用API說明 : Thread常用方法:獲取線程名稱getName()、設(shè)置名稱setName()、獲取當前線程對象currentThread()。 至于Thread類提供的諸如:yield、join、interrupt、不推薦的方法 stop 、守護線程、線程優(yōu)先級等線程的控制方法,在開發(fā)中很少使用,這些方法會在高級篇以及后續(xù)需要用到

    2024年02月21日
    瀏覽(24)
  • 【JavaEE】Java中的多線程 (Thread類)

    【JavaEE】Java中的多線程 (Thread類)

    作者主頁: paper jie_博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JavaEE》專欄,本專欄是針對于大學生,編程小白精心打造的。筆者用重金(時間和精力)打造,將基礎(chǔ)知識一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄:《MySQL》《

    2024年02月05日
    瀏覽(28)
  • 【Java系列】詳解多線程(二)——Thread類及常見方法(下篇)

    【Java系列】詳解多線程(二)——Thread類及常見方法(下篇)

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【Java系列專欄】【JaveEE學習專欄】 本專欄旨在分享學習Java的一點學習心得,歡迎大家在評論區(qū)交流討論?? 在操作系統(tǒng)中創(chuàng)建線程時,通常會同時創(chuàng)建相應(yīng)的PCB并將其

    2024年02月04日
    瀏覽(22)
  • 【Java系列】詳解多線程(二)——Thread類及常見方法(上篇)

    【Java系列】詳解多線程(二)——Thread類及常見方法(上篇)

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【Java系列專欄】【JaveEE學習專欄】 本專欄旨在分享學習Java的一點學習心得,歡迎大家在評論區(qū)交流討論?? 我們先來回顧一下線程與進程之間的聯(lián)系。 我們知道多進程

    2024年02月04日
    瀏覽(18)
  • 【C++】多線程(thread)使用詳解

    【C++】多線程(thread)使用詳解

    多線程(multithreading),是指在軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多核CPU的支持的計算機能夠真正在同一時間執(zhí)行多個程序片段,進而提升程序的處理性能。在一個程序中,這些獨立運行的程序片段被稱為“ 線程 ”(Thread),利用其編程的概念就叫作“多線

    2024年02月14日
    瀏覽(21)
  • 【Java|多線程與高并發(fā)】線程安全問題以及synchronized使用實例

    【Java|多線程與高并發(fā)】線程安全問題以及synchronized使用實例

    Java多線程環(huán)境下,多個線程同時訪問共享資源時可能出現(xiàn)的數(shù)據(jù)競爭和不一致的情況。 線程安全一直都是一個令人頭疼的問題.為了解決這個問題,Java為我們提供了很多方式. synchronized、ReentrantLock類等。 使用線程安全的數(shù)據(jù)結(jié)構(gòu),例如ConcurrentHashMap、ConcurrentLinkedQueue等

    2024年02月09日
    瀏覽(14)
  • 多線程系列(二) -Thread類使用詳解

    在之前的文章中,我們簡單的介紹了線程誕生的意義和基本概念,采用多線程的編程方式,能充分利用 CPU 資源,顯著的提升程序的執(zhí)行效率。 其中 java.lang.Thread 是 Java 實現(xiàn)多線程編程最核心的類,學習 Thread 類中的方法,是學習多線程的第一步。 下面我們就一起來看看,創(chuàng)

    2024年02月19日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包