当前位置:网站首页>多线程顺序运行的几种方法,面试可以随便问
多线程顺序运行的几种方法,面试可以随便问
2022-07-28 22:41:00 【技术琐事】
文章介绍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)的优点,串行执行所有任务。
输出结果:
打开冰箱!拿出一瓶牛奶!
关上冰箱!
边栏推荐
- R语言怎么学
- 刷题的第三十天
- PTA (daily question) 7-71 character trapezoid
- PTA (daily question) 7-73 turning triangle
- The 30th day of question brushing
- Summary: the difference between pod and container
- SAP VL02N 交货单过账函数 WS_DELIVERY_UPDATE
- Application and principle of distributed current limiting redistribution rratelimiter
- Alibaba code index technology practice: provide reading experience of local IDE for code review
- Dynamic programming problem (4)
猜你喜欢

动态规划问题(三)

What does the expression > > 0 in JS mean

MySQL 分库分表及其平滑扩容方案

Geth installation

CV target detection model sketch (2)

Google browser, no installation required

15. Model evaluation and selection

【飞控开发基础教程8】疯壳·开源编队无人机-I2C(激光测距)

Attack and defense world web master advanced area web_ php_ include

Advanced area of attack and defense world web masters -baby Web
随机推荐
110道 MySQL面试题及答案 (持续更新)
Flyway's quick start tutorial
【开发教程10】疯壳·开源蓝牙心率防水运动手环-蓝牙 BLE 收发
Table custom style row class name in elemenui
What does the expression > > 0 in JS mean
Api 接口优化有哪些技巧?
Geth installation
Anti shake and throttling
vulnhub:BTRSys2
Immutable x officially opens IMX token pledge detailed IMX pledge introduction optimistic about the development prospect of IMX
递归/回溯刷题(中)
Multimodal model sketch (1)
The difference between {} and ${}
Talk about seven ways to realize asynchronous programming
Alibaba Code代码索引技术实践:为Code Review提供本地IDE的阅读体验
[ESN] learning echo state network
flask与七牛云上传图片
NFTScan 与 NFTPlay 在 NFT 数据领域达成战略合作
Calculate properties and listeners
【esn】 学习回声状态网络