[多线程] 多线程工具之CountDownLatch

2021/10/11 6:18:10

本文主要是介绍[多线程] 多线程工具之CountDownLatch,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

在Java中, 如何启动多个线程. 随后使某项任务分步执行.


使用Join方法


使用CountDownLatch

CountDownLatch 内核心方法:

  • await(): 等待. 当count值为0时, 才能继续执行.
  • countDown(): 和方法名一样. 具体作用时将方法名称-1.
  • getCount(): 获取当前count值.

简单都小测试

import java.util.concurrent.CountDownLatch;

public class TestJava {

    public static final CountDownLatch countDownLatch = new CountDownLatch(3);

    public static void main(String[] args) throws InterruptedException {
        Thread threadA1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount());
                countDownLatch.countDown();
            }
        });
        Thread threadA2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount());
                countDownLatch.countDown();
            }
        });
        Thread threadA3 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount());
                countDownLatch.countDown();
            }
        });
        threadA1.start();
        threadA2.start();
        threadA3.start();
        // 等待3个线程都执行完成
        countDownLatch.await();
        Thread threadB1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("BThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount());
            }
        });
        Thread threadB2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("BThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount());
            }
        });
        threadB1.start();
        threadB2.start();
    }


}

实现细节

CountDownLatch其实也是使用AQS对Java中锁的一种实现方式. 有空的话可以详细解读下具体实现.


Reference



这篇关于[多线程] 多线程工具之CountDownLatch的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程