CountDownLatch简单用法

Posted huangtao1927

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CountDownLatch简单用法相关的知识,希望对你有一定的参考价值。

public abstract class ControllerCenter implements Runnable 

    private CountDownLatch countDown;

    private String controllerCenterName;

    private boolean result;

    public ControllerCenter(CountDownLatch countDown, String controllerCenterName) 
        this.countDown = countDown;
        this.controllerCenterName = controllerCenterName;
        this.result = false;
    

    @Override
    public void run() 
        try 
            check();
            result = true;
         catch (Exception e) 
            e.printStackTrace();
            result = false;
         finally 
            if (countDown != null) 
                countDown.countDown();
            
        
    

    /**
     * 子类重写
     * @return
     */
    protected abstract void check();

    public CountDownLatch getCountDown() 
        return countDown;
    

    public void setCountDown(CountDownLatch countDown) 
        this.countDown = countDown;
    

    public String getControllerCenterName() 
        return controllerCenterName;
    

    public void setControllerCenterName(String controllerCenterName) 
        this.controllerCenterName = controllerCenterName;
    

    public boolean isResult() 
        return result;
    

    public void setResult(boolean result) 
        this.result = result;
    
public class AControllerCenter extends ControllerCenter 

    public AControllerCenter(CountDownLatch countDown) 
        super(countDown, "AControllerCenter");
    

    @Override
    protected void check() 
        System.out.println("is check [" + "A" + "] now");
        try 
            Thread.sleep(2000);
         catch (Exception e) 
            e.printStackTrace();
        
        System.out.println("is check [" + "A" + "] success");
    
public class BControllerCenter extends ControllerCenter 

    public BControllerCenter(CountDownLatch countDown) 
        super(countDown, "BControllerCenter");
    

    @Override
    protected void check() 
        System.out.println("is check [" + "B" + "] now");
        try 
            Thread.sleep(5000);
         catch (Exception e) 
            e.printStackTrace();
        
        System.out.println("is check [" + "B" + "] success");
    
public class CheckSuccessTest 

    private static List<ControllerCenter> controllerCenterList;

    private static CountDownLatch countDown;

    public CheckSuccessTest() 
    

    public static boolean checkAll() throws Exception 
        countDown = new CountDownLatch(2);

        controllerCenterList = new ArrayList<>();
        controllerCenterList.add(new AControllerCenter(countDown));
        controllerCenterList.add(new BControllerCenter(countDown));

        Executor pool = Executors.newFixedThreadPool(2);
        for (ControllerCenter key : controllerCenterList) 
            pool.execute(key);
        

        countDown.await();

        for (ControllerCenter key : controllerCenterList) 
            if (!key.isResult()) 
                return false;
            
        
        return true;
    

    public static void main(String[] args) throws Exception 
        System.out.println("All Controller result is = [" + CheckSuccessTest.checkAll() + "]");
    

 

以上是关于CountDownLatch简单用法的主要内容,如果未能解决你的问题,请参考以下文章

多线程 - CountDownLatch

CountDownLatch简单用法

CountDownLatch源码分析

Java中的并发工具类

CountDownLatch用法---等待多个线程执行完才执行

并发编程系列之CountDownLatch用法简介