软件编程
位置:首页>> 软件编程>> java编程>> Java骚操作之CountDownLatch代码详解

Java骚操作之CountDownLatch代码详解

作者:Java Pro  发布时间:2023-01-17 11:14:41 

标签:Java,CountDownLatch

简述

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

实践代码


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()提前结束操作


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的超时时间


latch.await(2, TimeUnit.SECONDS);

执行结果

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

方法描述

Java骚操作之CountDownLatch代码详解

来源:https://blog.csdn.net/Fine_Cui/article/details/107144502

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com