我是靠谱客的博主 执着小熊猫,最近开发中收集的这篇文章主要介绍JUC计数器(加法和减法),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、减法计数器

    public static void main(String []args) throws InterruptedException {

        CountDownLatch countDownLatch = new CountDownLatch(6);

        for (int i = 1;i<=6;i++){
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+" go out");
                countDownLatch.countDown();
            }).start();
        }
        countDownLatch.await();
        System.out.println("close door");

    }

2、加法计数器

public static void main(String[] args) {
    CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> {
        System.out.println("Run");//先运行参数,达到目标值后运行lambda表达式中的代码
    });

    for (int i = 1; i <= 7; i++) {
        final int temp = i;
        new Thread(() -> {
            //lambda表达式中不能直接取i,需要通过定义final私有的中间变量
            System.out.println(Thread.currentThread().getName() + temp);
            try {
                cyclicBarrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
        }).start();
    }

}

3、线程限流

public static void main(String[] args) {
    //线程数量:限流
    Semaphore semaphore = new Semaphore(3);

    for (int i = 1;i<=6;i++){
        new Thread(()->{
            try {
                semaphore.acquire();//得到
                System.out.println(Thread.currentThread().getName()+"已入库");
                TimeUnit.SECONDS.sleep(2);
                System.out.println(Thread.currentThread().getName()+"已出库");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                semaphore.release();//释放
            }

        },String.valueOf(i)).start();
    }
}

最后

以上就是执着小熊猫为你收集整理的JUC计数器(加法和减法)的全部内容,希望文章能够帮你解决JUC计数器(加法和减法)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部