Java骚操作之CountDownLatch代码详解

2025-05-29 0 24

简述

用来干嘛的?当你在方法中调用了多个线程,对数据库进行了一些不为人知的操作后,还有一个操作需要留到前者都执行完的重头戏,就需要用到 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();

}

}

}

}

图解

Java骚操作之CountDownLatch代码详解

使用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的文章就介绍到这了,更多相关Java CountDownLatch内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://blog.csdn.net/Fine_Cui/article/details/107144502

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java骚操作之CountDownLatch代码详解 https://www.kuaiidc.com/108523.html

相关文章

发表评论
暂无评论