CountDownLatch+spring发布事件实现多线程

@Autowired
ApplicationContext applicationContext;

CountDownLatch countDownLatch = new CountDownLatch(1);
//发布事件,用来加载指定活动的奖品信息
applicationContext.publishEvent(new InitPrizeToRedisEvent(this,lottery.getId(), countDownLatch));
//开始抽奖
lotteryItem = doPlay(lottery);
//记录奖品并扣减库存
countDownLatch.await(); //抽奖和奖品初始化可异步执行,等待奖品初始化完成
// todo

2.定义事件InitPrizeToRedisEvent

public class InitPrizeToRedisEvent extends ApplicationEvent {
    private CountDownLatch countDownLatch;
    public InitPrizeToRedisEvent(Object source, CountDownLatch countDownLatch) {
        super(source);
        this.countDownLatch=countDownLatch;
    }

    public CountDownLatch getCountDownLatch() {
        return countDownLatch;
    }

    public void setCountDownLatch(CountDownLatch countDownLatch) {
        this.countDownLatch = countDownLatch;
    }

}

3.实现ApplicationListener配置监听事件处理业务逻辑

@Slf4j
@Component
public class InitPrizeToRedisListener implements ApplicationListener<InitPrizeToRedisEvent> {

    @Override
    public void onApplicationEvent(InitPrizeToRedisEvent initPrizeToRedisEvent) {
        // todo
        initPrizeToRedisEvent.getCountDownLatch().countDown(); //表示初始化完成
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值