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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix