Java怎么让多线程按顺序执行
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"Java怎么让多线程按顺序执行",内容详细,步骤清晰,细节处理妥当,希望这篇"Java怎么让多线程按顺序执行"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
千家信息网最后更新 2026年11月02日Java怎么让多线程按顺序执行
本文小编为大家详细介绍"Java怎么让多线程按顺序执行",内容详细,步骤清晰,细节处理妥当,希望这篇"Java怎么让多线程按顺序执行"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
在子线程中通过join()方法指定顺序
通过join()方法使当前线程"阻塞",等待指定线程执行完毕后继续执行。举例:在线程thread2中,加上一句thread1.join(),其意义在于,当前线程2运行到此行代码时会进入阻塞状态,直到线程thread1执行完毕后,线程thread2才会继续运行,这就保证了线程thread1与线程thread2的运行顺序。
public class ThreadJoinDemo { public static void main(String[] args) throws InterruptedException { final Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("打开冰箱!"); } }); final Thread thread2 = new Thread(new Runnable() { @Override public void run() { try { thread1.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("拿出一瓶牛奶!"); } }); final Thread thread3 = new Thread(new Runnable() { @Override public void run() { try { thread2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("关上冰箱!"); } }); //下面三行代码顺序可随意调整,程序运行结果不受影响,因为我们在子线程中通过"join()方法"已经指定了运行顺序。 thread3.start(); thread2.start(); thread1.start(); }}运行结果:
打开冰箱!
拿出一瓶牛奶!
关上冰箱!
在主线程中通过join()方法指定顺序
简单说一下子线程与主线程的区别,子线程指的是发生在Thread内部的代码,主线程指的是发生在main函数中的代码,我们可以在main函数中通过join()方法让主线程阻塞等待以达到指定顺序执行的目的。
public class ThreadMainJoinDemo { public static void main(String[] args) throws InterruptedException { final Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("打开冰箱!"); } }); final Thread thread2 = new Thread(new Runnable() { @Override public void run() { System.out.println("拿出一瓶牛奶!"); } }); final Thread thread3 = new Thread(new Runnable() { @Override public void run() { System.out.println("关上冰箱!"); } }); thread1.start(); thread1.join(); thread2.start(); thread2.join(); thread3.start(); }}输出结果:
打开冰箱!
拿出一瓶牛奶!
关上冰箱!
通过倒数计时器CountDownLatch实现
CountDownLatch通过计数器提供了更灵活的控制,只要检测到计数器为0当前线程就可以往下执行而不用管相应的thread是否执行完毕。
public class ThreadCountDownLatchDemo { private static CountDownLatch countDownLatch2 = new CountDownLatch(1); private static CountDownLatch countDownLatch3 = new CountDownLatch(1); public static void main(String[] args) { final Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("打开冰箱!"); countDownLatch2.countDown(); } }); final Thread thread2 = new Thread(new Runnable() { @Override public void run() { try { countDownLatch2.await(); System.out.println("拿出一瓶牛奶!"); countDownLatch3.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }); final Thread thread3 = new Thread(new Runnable() { @Override public void run() { try { countDownLatch3.await(); System.out.println("关上冰箱!"); } catch (InterruptedException e) { e.printStackTrace(); } } }); //下面三行代码顺序可随意调整,程序运行结果不受影响 thread3.start(); thread1.start(); thread2.start(); }}输出结果:
打开冰箱!
拿出一瓶牛奶!
关上冰箱!
通过创建单一化线程池newSingleThreadExecutor()实现
单线程化线程池(newSingleThreadExecutor)的优点,串行执行所有任务。
public class ThreadPoolDemo { static ExecutorService executorService = Executors.newSingleThreadExecutor(); public static void main(String[] args) { final Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("打开冰箱!"); } }); final Thread thread2 =new Thread(new Runnable() { @Override public void run() { System.out.println("拿出一瓶牛奶!"); } }); final Thread thread3 = new Thread(new Runnable() { @Override public void run() { System.out.println("关上冰箱!"); } }); executorService.submit(thread1); executorService.submit(thread2); executorService.submit(thread3); executorService.shutdown(); //使用完毕记得关闭线程池 } }输出结果:
打开冰箱!
拿出一瓶牛奶!
关上冰箱!
读到这里,这篇"Java怎么让多线程按顺序执行"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
线程
冰箱
顺序
牛奶
运行
结果
代码
方法
中通
文章
输出
阻塞
内容
函数
程序
计数器
三行
影响
调整
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东万易互联网科技有限公司惠州分公司
科技互联网公司装修
重庆互联网络科技
互联网公司 科技公司
壕鑫互联网络科技
天下捷融互联网科技
苏州大垚互联网科技
多迪互联网科技有限公司
盛创互联网科技有限公司
互联网和黑科技的看法
港股科技和互联网
赶超互联网科技 微信多开
辽宁互联网新科技
速维有品互联网信息科技(苏州)有限公司
广州百诚互联网科技有限公司官网
普陀区互联网教育科技管理办法
易租星互联网科技有限公司
同城互联网络科技
广东猫王互联网科技有限公司电话
网互联网络科技
互联网科技公司简介
中关村互联网科技集团
九亚互联网科技
兼蜜互联网科技
猫创互联网科技
厦门千工互联网科技有限公司
威龙国际互联网科技公司
互联网科技如何创业
智帮互联网科技公司最近动向
互联网科技平台产品运营