当前位置 博文首页 > java_bird:JAVA主线程等待所有子线程执行完成后主线程再执行

    java_bird:JAVA主线程等待所有子线程执行完成后主线程再执行

    作者:[db:作者] 时间:2021-09-03 15:06

     
    

    ? ? ? ? ?如标题,此功能主要是JDK1.5引入的java.util.concurrent包下的CountDownLatch类,此类据介绍为以线程辅助类,通过线程计数器来实现一个或多个主线程等待其下所有子线程执行完后主线程再继续执行的功能。

    ? ? ? ? 该类只在构造方法中提供了计数器的初始化,没有任何其他接口来修改或者设置此数值,而主线程与子线程之间通过CountDownLatch对象来进行通信控制并发的执行,子线程调用countDown()方法来表示一个子线程执行完毕,同时主线程调用await()方法等待所有子线程完成

    需要注意的是:1.初始化的线程计数器一定要和子线程调用的countDown()方法个数相等,否则主线程会一直等待;

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.主线程调用await()一定要在所有子线程start()后立马执行;


    以下是我的例子;

    ···

    package com.xuexin.bizserver.controller;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    
    /**
     * Created by zxl on 2016/11/1.
     */
    public class ThreadTest {
    
        private static final CountDownLatch latch=new CountDownLatch(2);//两个工人的协作
    
        public static void main(String[] args) throws InterruptedException {
            final List<String> list = new ArrayList<String>();
            Thread t1 = new Thread(){
                public void run() {
                    list.add("t1");
                    latch.countDown();
                }
            };
            Thread t2 = new Thread(){
                public void run() {
                    list.add("t2");
                    latch.countDown();
                }
            };
            t1.start();
            t2.start();
            latch.await();
            for (String s : list) {
                System.out.println("s="+s);
            }
        }
    
    }
    

    ···

    cs
    下一篇:没有了