Java线程加入(join)
2021-03-12 22:31
标签:cpu 作用 style 构造函数 没有 大于 java 线程 adt Java线程加入(join) 标签:cpu 作用 style 构造函数 没有 大于 java 线程 adt 原文地址:https://www.cnblogs.com/donleo123/p/14069918.html1、线程一
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 }