CountDownLatch简介

来源:互联网 发布:win10美化mac os 编辑:程序博客网 时间:2024/05/17 20:27

1 CountDownLatch函数列表

CountDownLatch(int count)
构造一个用给定计数初始化的 CountDownLatch。
// 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。
void await()
// 使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。
boolean await(long timeout, TimeUnit unit)
// 递减锁存器的计数,如果计数到达零,则释放所有等待的线程。
void countDown()
// 返回当前计数。
long getCount()
// 返回标识此锁存器及其状态的字符串。
String toString()


2 使用示例

下面通过CountDownLatch实现:"主线程"等待"5个子线程"全部都完成"指定的工作(休眠1000ms)"之后,再继续运行。

代码如下:

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;


public class CountDownLatchTest1 {


    private static int LATCH_SIZE = 5;
    private static CountDownLatch doneSignal;
    public static void main(String[] args) {


        try {
            doneSignal = new CountDownLatch(LATCH_SIZE);


            // 新建5个任务
            for(int i=0; i<LATCH_SIZE; i++)
                new InnerThread().start();


            System.out.println("main await begin.");
            // "主线程"等待线程池中5个任务的完成
            doneSignal.await();


            System.out.println("main await finished.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }


    static class InnerThread extends Thread{
        public void run() {
            try {
                Thread.sleep(1000);
                System.out.println(Thread.currentThread().getName() + " sleep 1000ms.");
                // 将CountDownLatch的数值减1
                doneSignal.countDown();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
0 0