【Java知识】java线程控制,控制线程的执行顺序,有多个方法,计数器信号量你用过吗?
Beginning
保证线程的顺序#
第一种:使用join#
for (int i = 0; i < 10; i++){
Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("我是t1线程");
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
System.out.println("我是t2线程\n");
}
});
t1.start();
t1.join();
t2.start();
Thread.sleep(500);
}
第二种:使用单线程池#
ExecutorService executor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++){
Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("我是t1线程");
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
System.out.println("我是t2线程\n");
}
});
executor.submit(t1);
executor.submit(t2);
Thread.sleep(500);
}
executor.shutdown();
第三种:使用CountDownLatch计数器#
for (int i = 0; i < 10; i++){
final CountDownLatch count = new CountDownLatch(1);
Thread t1 = new Thread(new Runnable() {
public void run() {
System.out.println("我是t1线程");
count.countDown();
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
count.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("我是t2线程\n");
}
});
t2.start();
t1.start();
Thread.sleep(500);
}
第四种:使用wait和notify控制#
第五种:使用CyclicBarrier循环屏障#
第六种:使用Semaphore信号量#
第七种:使用消息队列等中间件,如zookeeper、kafka等#
你问我为什么后面几种高大上的为什么没有例子,因为它们例子写起来代码有点多,如果没有使用过的同学一定要百度了解下,特别是CyclicBarrier和Semaphore,这两个是java后面新增的并发包中的类,好用不贵。不然都不好意思说自己精通java
总结#
以上多种控制线程顺序的方法,可以根据不同的场景使用不同的方法。每种方法都有他们的使用场景,在不同的场景选择最合适的方法才能事半功倍。
Ending
本文如果对您有帮助欢迎打赏作者,多少随意一分也是爱!
作者:Java夜未眠
出处:https://www.cnblogs.com/liangxianning/p/17058250.html
版权声明:本博客所有文章除特别声明外,均采用「 MIT 许可协议。」许可协议进行许可
关于博主: 评论和私信会可能回复较慢,点击上面加人图标加我为好友吧
分类:
知识点小例子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)