多线程之CountDownLatch类详解
下文笔者讲述多线程常使用的CountDownLatch类的简介说明,如下所示:
日常开发中,我们使用最多的for循环,进行遍历操作时, 会导致效率低下,那么如何才能提高效率呢? 下文笔者讲述一种并发执行,使接口的效率更高,如下所示: ------------------------------------------------------------------ 实现思路: 使用CountDownLatch类进行相应的处理
CountDownLatch类的作用
CountDownLatch是java.util.concurrent包下的一个类 它允许一个或多个线程等待其他的线程执行到某一操作 CountDownLatch是通过一个计数器来实现的 计数器的初始值就是线程的数量,每当一个线程完成自己的任务后 计数器的值就会减一 当计数器值到达0后 表示所有线程都已经完成自己的任务 然后等待的线程便可以恢复执行的任务
CountDownLatch中常见的API
构造函数
public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(count); } count实际上就是闭锁等待的线程数量,这个值只能设置一次,不能重复设置这个计数值。
阻塞方法:await
public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1); }
CountDownLatch的第一次交互是主线程等待其他线程 主线程必须在启动其他线程后立即调用await()方法来阻塞主线程 直到其他线程完成各自的任务。
计数器减一countDown()
public void countDown() { sync.releaseShared(1); }
其他N个线程通过countDown方法完成调用 没调用一次该方法 构造函数中的初始的count值就会-1 当count值为0时,主线程就能通过await()方法 恢复执行自己的任务例:
package com.java265.other; import java.util.concurrent.CountDownLatch; public class Test16 { /** * java265.com 示例程序 * @throws Exception */ public static void main(String[] args) throws Exception { final CountDownLatch countDownLatch = new CountDownLatch(3); for (int i = 0; i < 3; i++) { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " 运行!"); countDownLatch.countDown(); } }).start(); } countDownLatch.await(); System.out.println("主线程运行完毕!"); } } ------运行以上代码,将输出以下信息------ Thread-0 运行! Thread-2 运行! Thread-1 运行! 主线程运行完毕!
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。