JUC计数器(加法和减法)

本文探讨了三种关键的多线程编程技术:减法计数器实现同步退出,加法计数器利用CyclicBarrier控制任务执行顺序,以及Semaphore实现线程限流。通过实例展示了如何在Java中运用这些工具优化并发操作。
摘要由CSDN通过智能技术生成

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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值