Java 高并发编程详解 13.0 latch(门闸)模式

latch模式

门闸(latch)模式 指定一个屏障,只有所有的条件都满足的时候 门闸才可以打开执行后面任务
和Thread.join方法类似 当子线程调用join方法会阻塞所在的主线程,直到子线程执行完成后才运行主线程代码

latch门闸抽象类

public abstract class Latch {
   
    // 用于控制多少个线程完成任务时才打开门闸
    protected int limit;
    // 构造传入limit参数
    public Latch(int limit){
   
        this.limit = limit;
    }
    // 该方法会使用当前线程(主线程)一直等待 直到所有其他线程(子线程)执行完成工作,当前线程是允许被中断的
    // 无超时时间
    public abstract void await() throws InterruptedException;
    // 有超时时间
    public abstract void await(TimeUnit unit,long time) throws InterruptedException,WaitTimeOutException;

    // 当其他线程完成任务后计数器减一
    public abstract void countDown();
    // 获取当前还有几个线程没有执行完成
    public abstract int getUnarrived();
}

latch抽象类的实现类


/**
 * latch抽象类的实现
 */
public class CountDownLatch extends Latch{
   
    // 增加回调功能
    private final Runnable runnable;

    public CountDownLatch(int limit,Runnable runnable) {
   
        super(limit);
        this.runnable = runnable;
    }

    @Override
    public void await() throws InterruptedException {
   
        synchronized (this){
   
            // 其他线程没有全部执行完成 主线程阻塞
            while (limit > 0){
   
                this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值