当前位置:网站首页>Ali: How many methods are there for multi-threaded sequential operation?
Ali: How many methods are there for multi-threaded sequential operation?
2022-07-30 07:52:00 【chenxuyuana】
文章介绍4种方法,简单易懂,通过4个demo抛砖引玉.
1、在子线程中通过join()方法指定顺序
通过join()方法使当前线程“阻塞”,
“”
运行结果:
2、在主线程中通过join()方法指定顺序
子线程指的是发生在Thread内部的代码,主线程指的是发生在main函数中的代码.最新多线程面试题整理好了,点击Java面试库小程序在线刷题.
我们可以在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();
}
}
基础就不介绍了,多线程系列我博客教程写了很多了,这里推荐大家看看吧:https://www.javastack.cn/categories/Java/
输出结果:
打开冰箱!拿出一瓶牛奶!
关上冰箱!
3、通过倒数计时器CountDownLatch实现
CountDownLatch通过计数器提供了更灵活的控制,只要检测到计数器为0当前线程就可以往下执行而不用管相应的thread是否执行完毕.
public class ThreadCountDownLatchDemo {private static CountDownLatch countDownLatch1 = new CountDownLatch(1);
private static CountDownLatch countDownLatch2 = new CountDownLatch(1);
public static void main(String[] args) {
final Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println( "打开冰箱!");
countDownLatch1.countDown();
}
});
final Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
try {
countDownLatch1.await();
System.out.println( "拿出一瓶牛奶!");
countDownLatch2.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
final Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
try {
countDownLatch2.await();
System.out.println( "关上冰箱!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
//下面三行代码顺序可随意调整,程序运行结果不受影响
thread3.start();
thread1.start();
thread2.start();
}
}
打开冰箱!
拿出一瓶牛奶!
关上冰箱!
单线程化线程池(newSingleThreadExecutor)的优点,串行执行所有任务.
输出结果:
打开冰箱!拿出一瓶牛奶!
关上冰箱!
边栏推荐
- proftpd 配置文件说明
- Test Development Engineer Growth Diary 008 - Talking About Some Bugs/Use Case Management Platform/Collaboration Platform
- CTO说不建议我使用SELECT * ,这是为什么?
- Redis download and installation
- 阿里一面:多线程顺序运行有多少种方法?
- As a test leader, examine several aspects of job candidates
- AI can identify race from X-rays, but no one knows why
- Advanced multi-threading (CountDownLatch, deadlock, thread-safe collection class)
- 和AI一起玩儿剧本杀:居然比我还入戏
- The newcomer deleted data by mistake, and the team leader skillfully used MySQL master-slave replication to delay the recovery of losses
猜你喜欢
随机推荐
Dachang's annual salary of 50w+ recruits test engineers with test platform development capabilities
Test Development Engineer Growth Diary 007 - Bug Priority Definition and Filling Specifications
schur completement
大厂年薪50w+招聘具有测试平台开发能力的测试工程师
STL源码剖析:class template explicit specialization代码测试和理解
上传文件--文件类型大全,图片类型,文档类型,视频类型,压缩包类型
(GGG)JWT
Boot process and service control
手机端滚动至页面指定位置
矩阵的行列式的计算及其源码
RAID磁盘阵列
roslyn folder under bin folder
STL源码剖析:bound friend template friend代码测试和理解
Proof of distance calculation from space vertex to plane and its source code
window.open()的用法,js打开新窗体
LVM和磁盘配额
Local Implicit Grid Representations for 3D Scenes详解
The Society of Mind - Marvin Minsky
软件测试_01
The CTO said I was not advised to use SELECT *, why is that?









