主线程等待子线程结束再做响应

之前遇到的前后台交互都是很快的,往往最长的也就10秒左右。现在遇到一个问题,根据前台的请求,后台需要再开一个或多个耗时的子线程,可是没等子线程结束,后台已经响应前台了,这就不对了。

这里网上查了一下资料,发现了一个非常好用的工具类CountDownLatch

CountDownLatch可以初始化线程的总数量,每当子线程结束就调用countDown()方法,使其减一,在主线程调用await()方法等待,直到

CountDownLatch里的线程数为0才继续往下走。

 @Override
    public boolean test() {
        try{//取得一个倒计时器,因为这里只有一个子线程,所有从1开始
            CountDownLatch countDownLatch = new CountDownLatch(1);
            new Thread() {
                @Override
                public void run() {
                    try {
                    super.run();
                    logger.warn(port + "," + host + "," + ErtuID);
                    System.out.println(countDownLatch.getCount()+" 线程的长度");
                        //子线程耗时操作
                    } catch (Exception e) {
                        e.printStackTrace();
                    }finally {
                        //线程结束时,将计时器减一
                        countDownLatch.countDown();
                        System.out.println(countDownLatch.getCount()+" 线程的长度");
                    }
                }
            }.start();
            //等待所有的子线程结束
            countDownLatch.await();
        }catch (Exception e){
            return false;
        }
        return true;
    }

 

posted @ 2019-08-19 15:22  听见温暖www  阅读(602)  评论(0编辑  收藏  举报