美文网首页
CountDownLatch示例

CountDownLatch示例

作者: zoterap | 来源:发表于2019-02-13 10:32 被阅读321次

要点

CountDownLatch:一种同步辅助工具,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成;

理解

image.png

示例

package com.zoterap.javabasic.current;

import lombok.AllArgsConstructor;

import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import static java.lang.String.format;

public class CountDownLatchDemo {

    private static final int num = 3;
    private static CountDownLatch countDownLatch = new CountDownLatch(num + 1);
    private static Random random = new Random();

    /**
     * 运动员线程
     */
    @AllArgsConstructor
    static class SportsManThread extends Thread {

        private String name;

        @Override
        public void run() {
            int warmUpTime = random.nextInt(3) + 1;
            try {
                TimeUnit.SECONDS.sleep(warmUpTime);
                System.out.println(format("[%s]热身[%d]秒", name, warmUpTime));

                /**
                 * 减少闩锁的数量
                 */
                countDownLatch.countDown();
                System.out.println(format("[%s]热身完成,已就位", name));

                /**
                 * 线程等待,直到闩锁的数量为0
                 */
                countDownLatch.await();
                
                System.out.println(format("[%d][%s]开跑......", System.currentTimeMillis(), name));
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
        for (int i = 1; i < num + 1; i++) {
            new SportsManThread(i + "号运动员").start();
        }

        try {
            countDownLatch.countDown();
            countDownLatch.await();
            System.out.println("所有运用员都已经准备好");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

执行结果

[2号运动员]热身[1]秒
[2号运动员]热身完成,已就位
[1号运动员]热身[2]秒
[3号运动员]热身[2]秒
[1号运动员]热身完成,已就位
[3号运动员]热身完成,已就位
所有运用员都已经准备好
[1550024832810][1号运动员]开跑......
[1550024832810][3号运动员]开跑......
[1550024832810][2号运动员]开跑......

相关文章

网友评论

      本文标题:CountDownLatch示例

      本文链接:https://www.haomeiwen.com/subject/afyreqtx.html