CountDownLatch 多线程记数
package ice.snow.count; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 使用CuntDownLatch类进行线程技术,保证所有的线程执行完之后,在执行下一步操作 * @author Binbin.Yang1 * */ public class Main { public static void main(String[] args) { // 定义线程数量 int size = 5; // 定义countDownLatch CountDownLatch latch = new CountDownLatch(size); // 使用线程池进行线程处理 ExecutorService executor = Executors.newCachedThreadPool(); for (int i = 0 ; i < size ; i ++) { final int a = i; // 这里采用jdk8的lambda表达式进行线程的实现,也可以使用传统实现Runnable的方式进行操作,将latch作为参数传给Runnable的实现类即可 executor.execute(() -> { System.out.println("线程-" + a + " 在执行"); try { // 每个线程沉睡两秒 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } // 线程执行结束后,记数减一 latch.countDown(); }); } try { // 记数处于阻塞状态,当记数为0时可进行下一步操作,也可以使用await的重载方法,设置阻塞时间 latch.await(); }catch (Exception e) { e.printStackTrace(); } executor.shutdown(); System.out.println("线程全部执行结束"); } }