主线程等待子线程结束再做响应
之前遇到的前后台交互都是很快的,往往最长的也就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; }