每天一个知识点(三)如何让多个线程按顺序执行?

简介: 每天一个知识点(三)如何让多个线程按顺序执行?

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


(一)每天一个知识点


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


(二)结论


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


(三)再多学一点


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


publicstaticvoidmain(String[] args) throwsInterruptedException {
Threada1=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
Threada2=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
Threada3=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
a1.start();
a1.join();
a2.start();
a2.join();
a3.start();
a3.join();
}

2.子线程中使用join

publicstaticvoidmain(String[] args) throwsInterruptedException {
Threada1=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
Threada2=newThread(newRunnable() {
@Overridepublicvoidrun() {
try {
a1.join();
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
Threada3=newThread(newRunnable() {
@Overridepublicvoidrun() {
try {
a2.join();
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
a1.start();
a2.start();
a3.start();
}

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

staticExecutorServiceservice=Executors.newSingleThreadExecutor();
publicstaticvoidmain(String[] args) {
Threada1=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"打开冰箱");
        }
    });
Threada2=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"取出物品");
        }
    });
Threada3=newThread(newRunnable() {
@Overridepublicvoidrun() {
System.out.println(Thread.currentThread().getName()+"关闭冰箱");
        }
    });
service.submit(a1);
service.submit(a2);
service.submit(a3);
}


相关文章
|
24天前
|
Java Python
python知识点100篇系列(16)-python中如何获取线程的返回值
【10月更文挑战第3天】本文介绍了两种在Python中实现多线程并获取返回值的方法。第一种是通过自定义线程类继承`Thread`类,重写`run`和`join`方法来实现;第二种则是利用`concurrent.futures`库,通过`ThreadPoolExecutor`管理线程池,简化了线程管理和结果获取的过程,推荐使用。示例代码展示了这两种方法的具体实现方式。
python知识点100篇系列(16)-python中如何获取线程的返回值
|
2月前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
|
5月前
|
安全 Java 编译器
JAVA-多线程知识点总结(二)
JAVA-多线程知识点总结(二)
|
6月前
|
存储 安全 Java
并发编程知识点(volatile、JMM、锁、CAS、阻塞队列、线程池、死锁)
并发编程知识点(volatile、JMM、锁、CAS、阻塞队列、线程池、死锁)
102 3
|
4月前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
75 0
|
5月前
|
Oracle Java 关系型数据库
面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
136 0
|
5月前
|
设计模式 安全 Java
JAVA-多线程知识点总结(三)
JAVA-多线程知识点总结(三)
|
5月前
|
Java 调度
JAVA-多线程知识点总结(一)
JAVA-多线程知识点总结(一)
|
6月前
|
Java
java线程知识点总结
Java线程核心概念:线程是程序执行流,一个进程可有多个线程。创建线程通过继承Thread或实现Runnable接口。线程状态包括新建、就绪、运行、阻塞、等待、超时等待和终止。同步用synchronized或Lock防止数据不一致,避免死锁。线程间通过共享变量、wait/notify通信。线程池(如ThreadPoolExecutor、ScheduledThreadPoolExecutor)优化性能和资源管理。
44 6
|
6月前
|
安全 算法 Java
多线程知识点总结
多线程知识点总结
66 3