JUC-how to use CountDownLatch

in JUC kit package,CountDownLatch is a frequently-used class in specific concurrent sence,such as the last execution.

as we use countDownLatch's getCount() method to judge the last execution when to run.

the following code is to use CountDown Latch to solve the problem.

package JavaAdvanced;

import java.util.concurrent.CountDownLatch;

/**
 * @author 韦海涛
 * @version 1.0
 * @date 4/5/2021 12:39 AM
 */
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(4);

        for (int i = 0; i < 4; i++) {
            final String temp = i+"";
            new Thread(()->{
                System.out.println("now is\t"+Thread.currentThread().getName()+"run");
                countDownLatch.countDown();
            },temp).start();
        }

        while (countDownLatch.getCount()!=0){
            countDownLatch.await();
        }
        System.out.println(Thread.currentThread().getName()+" have run to zero");


    }
}

if we need execute orderly.how to implement it?

package JavaAdvanced;

import java.util.concurrent.CountDownLatch;

/**
 * @author 韦海涛
 * @version 1.0
 * @date 4/5/2021 12:39 AM
 */
public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(4);

        for (int i = 1; i <= 4; i++) {
            final int temp = i;
            new Thread(()->{
                System.out.println("now is\t"+Thread.currentThread().getName()+"run");
                countDownLatch.countDown();
            },NumEnum.foreach_elemnt(temp).getMessage()).start();
        }

        countDownLatch.await();
        System.out.println(Thread.currentThread().getName()+" have run to zero");


    }
}
package JavaAdvanced;

/**
 * @author 韦海涛
 * @version 1.0
 * @date 4/5/2021 1:11 AM
 */
public enum NumEnum {
    ONE(1,"第1位同学"),
    TWO(2,"第2位同学"),
    THREE(3,"第3位同学"),
    THIRD(4,"第4位同学");
    private int id;
    private String message;

    NumEnum(int id,String message){
        this.id = id;
        this.message = message;
    }

    public static NumEnum foreach_elemnt(int index){
        NumEnum[] myArray = NumEnum.values();
        for(NumEnum numEnum:myArray){
            if(numEnum.getId()==index){
                return numEnum;
            }
        }
        return null;
    }

    public int getId() {
        return id;
    }

    public String getMessage() {
        return message;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值