gpt4 book ai didi

Java骚操作之CountDownLatch代码详解

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java骚操作之CountDownLatch代码详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

简述

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

假设公司1、公司2、公司三各需要2s、3s、5s来完成工作,贾总等不了,只能等2s,那么就设置await的超时时间 。

?
1
latch.await( 2 , TimeUnit.SECONDS);

执行结果

负责人:公司一开始工作,持续时间:2秒 ~~~贾总PPT巡演~~~~ ~~~~融资完成,撒花~~~~ 负责人:公司二开始工作,持续时间:3秒 负责人:公司三开始工作,持续时间:5秒 。

方法描述 。

Java骚操作之CountDownLatch代码详解

总结

这个操作可以说是简单好用,目前还未遇见副作用,若是有大佬,可以告知弟弟一下,提前表示感谢~ 。

到此这篇关于Java骚操作之CountDownLatch的文章就介绍到这了,更多相关Java CountDownLatch内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

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

最后此篇关于Java骚操作之CountDownLatch代码详解的文章就讲到这里了,如果你想了解更多关于Java骚操作之CountDownLatch代码详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com