<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

      線程聯合

      當前線程邀請調用方法的線程優先執行,在調用方法的線程執行結束之前,當前線程不能再次執行。線程A在運行期間,可以調用線程B的join()方法,讓線程B和線程A聯合。這樣,線程A就必須等待線程B執行完畢后,才能繼續執行。

      join方法的使用

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

      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();
             }
           }
         }
      }
      
      

      線程聯合案例

      需求:

      實現爸爸讓兒子買煙。

      /**
       * 兒子買煙線程
       */
      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("爸爸想抽煙,發現煙抽完了");
          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實現多線程方式。

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

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

      class GetName2 implements Runnable{
      
      
        @Override
        public void run() {
          System.out.println(Thread.currentThread().getName());
         }
      }
      
      
      設置線程的名稱setName()
      方式一

      通過構造方法設置線程名稱。

      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()方法設置線程名稱。

      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()方法: 判斷當前的線程是否處于活動狀態。

      活動狀態是指線程已經啟動且尚未終止,線程處于正在運行或準備開始運行的狀態,就認為線程是存活的。

      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());
         }
      }
      
      
      posted @ 2023-11-05 18:53  Gjq-  閱讀(44)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 亚洲 一区二区 在线| 玩两个丰满老熟女久久网| 国产精品女在线观看| 亚洲区成人综合一区二区| 中文字幕无码视频手机免费看| 蜜桃av亚洲精品一区二区| 中国少妇人妻xxxxx| 日韩精品成人区中文字幕| 荔浦县| 久久综合色最新久久综合色| 东方av四虎在线观看| 国产午夜福利免费入口| 久久国产免费观看精品3| 偷柏自拍亚洲综合在线| 亚洲熟女乱综合一区二区| 男女激情一区二区三区| 日韩免费无码视频一区二区三区| 安丘市| 亚洲精品无码日韩国产不卡av| 国产精品人成视频免| 国产精品女同一区三区五区| 日韩精品卡1卡2日韩在线| 伊人久久大香线焦av综合影院| 亚洲国产天堂久久综合网| 岛国岛国免费v片在线观看| 国产日韩精品中文字幕| 国产精品∧v在线观看| 久久精品国产99久久6| 日本一区二区三区在线播放| 最新亚洲春色av无码专区| 亚洲啪啪精品一区二区的| 无码专区 人妻系列 在线| 无码A级毛片免费视频下载| 日韩精品一区二区三区vr| 老司机精品影院一区二区三区| 午夜精品区| 林周县| 一本精品99久久精品77| 国产精品护士| 亚洲中文日韩一区二区三区| 国产无遮挡无码视频在线观看|