简述
用来干嘛的?当你在方法中调用了多个线程,对数据库进行了一些不为人知的操作后,还有一个操作需要留到前者都执行完的重头戏,就需要用到 CountDownLatch
了
实践代码
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package com.github.gleans;
import java.util.concurrent.CountDownLatch;
public class TestCountDownLatch {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch( 3 );
new KeyPass(1000L, "thin jack" , latch).start();
new KeyPass(2000L, "noral jack" , latch).start();
new KeyPass(3000L, "fat jack" , latch).start();
latch.await();
System.out.println( "此处对数据库进行最后的插入操作~" );
}
static class KeyPass extends Thread {
private long times;
private CountDownLatch countDownLatch;
public KeyPass( long times, String name, CountDownLatch countDownLatch) {
super (name);
this .times = times;
this .countDownLatch = countDownLatch;
}
@Override
public void run() {
try {
System.out.println( "操作人:" + Thread.currentThread().getName()
+ "对数据库进行插入,持续时间:" + this .times / 1000 + "秒" );
Thread.sleep(times);
countDownLatch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
图解
使用await()提前结束操作
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package com.github.gleans;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class TestCountDownLatch {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch( 3 );
new KeyPass(2000L, "公司一" , latch).start();
new KeyPass(3000L, "公司二" , latch).start();
new KeyPass(5000L, "公司三" , latch).start();
latch.await( 2 , TimeUnit.SECONDS);
System.out.println( "~~~贾总PPT巡演~~~~" );
System.out.println( "~~~~融资完成,撒花~~~~" );
}
static class KeyPass extends Thread {
private long times;
private CountDownLatch countDownLatch;
public KeyPass( long times, String name, CountDownLatch countDownLatch) {
super (name);
this .times = times;
this .countDownLatch = countDownLatch;
}
@Override
public void run() {
try {
Thread.sleep(times);
System.out.println( "负责人:" + Thread.currentThread().getName()
+ "开始工作,持续时间:" + this .times / 1000 + "秒" );
countDownLatch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
|
假设公司一、公司二、公司三各需要2s、3s、5s来完成工作,贾总等不了,只能等2s,那么就设置await的超时时间
?
1
|
latch.await( 2 , TimeUnit.SECONDS);
|
执行结果
负责人:公司一开始工作,持续时间:2秒
~~~贾总PPT巡演~~~~
~~~~融资完成,撒花~~~~
负责人:公司二开始工作,持续时间:3秒
负责人:公司三开始工作,持续时间:5秒
方法描述
总结
这个操作可以说是简单好用
,目前还未遇见副作用
,若是有大佬,可以告知弟弟一下,提前表示感谢~
到此这篇关于Java骚操作之CountDownLatch的文章就介绍到这了,更多相关Java CountDownLatch内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!
原文链接:https://blog.csdn.net/Fine_Cui/article/details/107144502
相关文章
猜你喜欢
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
将Sublime Text 2固定到Ubuntu启动器的方法
2025-05-25 90 -
2025-06-04 40
-
2025-06-05 54
-
2025-05-25 81
-
2025-05-25 24
热门评论