1. 程式人生 > 實用技巧 >Java執行緒加入(join)

Java執行緒加入(join)

1、執行緒一

 1 package com.cn.donleo.thread.join;
 2 
 3 /**
 4  * @author liangd
 5  * date 2020-11-02 09:58
 6  * code
 7  */
 8 public class ThreadOne extends Thread {
 9     /**
10      * Thread類中的join方法的主要作用就是同步,
11      * 它可以使得執行緒之間的並行執行變為序列執行
12      */
13     @Override
14     public void run() {
15         System.out.println("執行緒1開始跑");
16 ThreadTwo threadTwo = new ThreadTwo(); 17 threadTwo.start(); 18 try { 19 //join裡面如果沒有引數,則另一個執行緒執行完成以後再執行本執行緒 20 threadTwo.join(); 21 //join裡面如果有引數,則表示當前執行緒願意等待的時間,如果時間小於另一個執行緒的時間,則到時間後不需等待,直接執行 22 //表示最多給執行緒2兩秒的時間 23 // threadTwo.join(2000);
24 } catch (InterruptedException e) { 25 e.printStackTrace(); 26 } 27 System.out.println("執行緒1結束跑"); 28 } 29 }

2、執行緒二

 1 package com.cn.donleo.thread.join;
 2 
 3 /**
 4  * @author liangd
 5  * date 2020-11-02 09:58
 6  * code
 7  */
 8 public class ThreadTwo extends
Thread { 9 @Override 10 public void run() { 11 System.out.println("執行緒2開始跑"); 12 ThreadThree threadThree = new ThreadThree(this); 13 threadThree.start(); 14 try { 15 Thread.sleep(8000); 16 } catch (InterruptedException e) { 17 e.printStackTrace(); 18 } 19 System.out.println("執行緒2結束跑"); 20 21 } 22 }

3、執行緒三

 1 package com.cn.donleo.thread.join;
 2 
 3 /**
 4  * @author liangd
 5  * date 2020-11-02 09:58
 6  * code
 7  */
 8 public class ThreadThree extends Thread {
 9     private final ThreadTwo threadTwo;
10 
11     /**
12      * 通過建構函式獲取執行緒二物件
13      *
14      * @param threadTwo
15      */
16     ThreadThree(ThreadTwo threadTwo) {
17         this.threadTwo = threadTwo;
18     }
19 
20     @Override
21     public void run() {
22         System.out.println("執行緒3開始跑");
23         /*
24           執行緒三的作用:
25           1、將執行緒2保護起來
26           2、Thread.sleep(5000) 表示允許執行緒2執行的時間,
27              如果執行緒2睡眠的時間小於這個時間,則執行緒2執行完才執行結束執行緒3
28              如果執行緒2休眠時間大於這個時間,則到了這個時間就直接結束執行緒3
29          */
30         synchronized (threadTwo) {
31             try {
32                 Thread.sleep(5000);
33             } catch (InterruptedException e) {
34                 e.printStackTrace();
35             }
36         }
37 
38         System.out.println("執行緒3結束跑");
39     }
40 }

4、測試類

 1 package com.cn.donleo.thread.join;
 2 
 3 /**
 4  * @author liangd
 5  * date 2020-11-02 10:01
 6  * code 執行緒加入測試類
 7  */
 8 public class TestJoin {
 9     public static void main(String[] args){
10         /*
11             現在想做一個事情,就是讓多執行緒變成單執行緒,就是人為控制執行緒的順序
12             以前我們執行緒的執行順序是由CPU自動執行,現在我們人為控制,加join,把執行緒加入到另一個執行緒
13          */
14         ThreadOne threadone = new ThreadOne();
15         threadone.start();
16     }
17 }