CountDownLatch的使用示例

    技术2022-07-10  141

     

    CountDownLatch基于计数器的思想,对线程的执行流程进行控制,一般用于多个任务都完成才可进行下一步的情况.

    上代码:

    public static void main(String[] args) { /** * 创建 CountDownLatch 并指定计数器的值为3 */ CountDownLatch countDownLatch = new CountDownLatch(3); ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( 3,10,10,TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(1), new ThreadPoolExecutor.DiscardOldestPolicy()); Runner runner = new Runner(countDownLatch); threadPoolExecutor.execute(runner); threadPoolExecutor.execute(runner); threadPoolExecutor.execute(runner); try { /** * 直到计数器的值减为0,否则一直阻塞在此处 */ countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("===The End==="); threadPoolExecutor.shutdownNow(); } static class Runner implements Runnable { private CountDownLatch countDownLatch; public Runner(CountDownLatch countDownLatch) { this.countDownLatch = countDownLatch; } @Override public void run() { System.out.println(Thread.currentThread().getName() + "执行"); try { Thread.sleep((long) (Math.random() * 5000 + 1000)); } catch (InterruptedException e) { e.printStackTrace(); } /** * 每一个线程执行一次,计数器的值减1 */ countDownLatch.countDown(); } }

     

    Processed: 0.012, SQL: 9