当前位置: 首页 > news >正文

如何让多个线程按顺序执行?

微信搜索《Java鱼仔》,每天一个知识点不错过

(一)每天一个知识点

如何让多个线程按顺序执行?

(二)结论

1.主线程中使用join
2.子线程中使用join
3.使用单一化线程池

(三)再多学一点

我们都知道线程的执行顺序是无序的,但是有的时候我们希望线程按顺序执行该怎么做呢?我在下面提供了三种方式:
1.主线程中使用join

public static void main(String[] args) throws InterruptedException {
    Thread a1=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
    Thread a2=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
    Thread a3=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
    a1.start();
    a1.join();
    a2.start();
    a2.join();
    a3.start();
    a3.join();
}

2.子线程中使用join

public static void main(String[] args) throws InterruptedException {
    Thread a1=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
    Thread a2=new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                a1.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
    Thread a3=new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                a2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
    a1.start();
    a2.start();
    a3.start();
}

3.使用单一化线程池,单一化线程池一次只提供一个线程,相当于单线程的操作。

static ExecutorService service= Executors.newSingleThreadExecutor();
public static void main(String[] args) {
    Thread a1=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
    Thread a2=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
    Thread a3=new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
    service.submit(a1);
    service.submit(a2);
    service.submit(a3);
}

相关文章:

  • 泛型设计实现反向比较器
  • 说一下 HashMap 的实现原理?
  • 两个对象的 hashCode()相同,则 equals()也一定为 true吗?
  • 抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  • CLion 2016.1新增Python、Swift支持,并改进了C++支持
  • SpringBoot如何实现异步、定时任务?
  • Java中BIO、NIO、AIO 有什么区别?
  • 网络协议系列之二:HTTP(2)
  • redis和mysql数据不一致问题如何解决?
  • Spring中的资源加载策略
  • 你知道迭代器 Iterator 是什么吗?
  • 什么是乐观锁、什么是悲观锁,两种锁在Java中的具体应用场景有哪些
  • Error: Out of memory! attempting SFTP connectio
  • 谈一谈session和cookie的区别,以及session的实现机制
  • Android--activity获取返回值
  • @angular/forms 源码解析之双向绑定
  • 【Leetcode】104. 二叉树的最大深度
  • Android Volley源码解析
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MD5加密原理解析及OC版原理实现
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 阿里云应用高可用服务公测发布
  • 初识 beanstalkd
  • 基于webpack 的 vue 多页架构
  • 简单实现一个textarea自适应高度
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 人脸识别最新开发经验demo
  • 我从编程教室毕业
  • Spring Batch JSON 支持
  • ​flutter 代码混淆
  • ​什么是bug?bug的源头在哪里?
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #stm32驱动外设模块总结w5500模块
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (js)循环条件满足时终止循环
  • (JS基础)String 类型
  • (黑马C++)L06 重载与继承
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)插入排序
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)jQuery 基础
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *上位机的定义
  • .bat批处理(六):替换字符串中匹配的子串
  • .mysql secret在哪_MySQL如何使用索引
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET 中的轻量级线程安全
  • .NET程序员迈向卓越的必由之路
  • [android] 看博客学习hashCode()和equals()
  • [android] 切换界面的通用处理
  • [Android]使用Retrofit进行网络请求