【现学现卖】CountDownLatch---支付中实现“一个都不能少”--我们都挺好

 
情景介绍:
 
之前项目中做支付时,用到了多线程方法,线程A是项目的业务线程,在某一点进行流程走完以后,进行支付时,会开启
另外一个线程B,支付以后调用的是支付接口进行支付,我们做过支付的是一般知道微信与支付宝在支付时,会回调咱们一个接口,在这里使用CountDownLatch是想等这两个线程AB都有了结果,线程A流程走完,线程B支付成功,然后我再进行下一步的操作,生成成功的标识图,然后前端展示,下面通过一个小demo,来模拟此场景:

package com.zcw.demo2;

import java.util.concurrent.CountDownLatch;

/**
 * @ClassName : MyThread
 * @Description :
 * @Author : Zhaocunwei
 * @Date: 2020-04-17 13:44
 */
public class MyThread extends Thread {
    private CountDownLatch maxRuner;
    public MyThread(CountDownLatch maxRuner){
        super();
        this.maxRuner = maxRuner;
    }
    @Override
    public void run(){
        try {
            Thread.sleep(2000);
            maxRuner.countDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch maxRuner = new CountDownLatch(10);
        MyThread[] tArray = new MyThread[Integer.parseInt(""+maxRuner.getCount())];
        for(int i =0;i<tArray.length;i++){
            tArray[i] = new MyThread(maxRuner);
            tArray[i].setName("线程" +(i+1));
            tArray[i].start();
        }
        maxRuner.await();
        System.out.println("都回来了!");
    }
}

运行结果:

在这里插入图片描述
悟:
 

通过这件事论证了,我们多个线程与同步点间阻塞的特性,线程必须都到达同步点后才可以继续向下运行。

发布了475 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_32370913/article/details/105578775