Java執行緒加入(join)
阿新 • • 發佈:2020-12-01
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 extendsThread { 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 }