题目标题

介绍一下多线程怎么获取结果,怎么判断全部线程结束?

参考解析

我们多线程抓取数据或者多线程执行任务时,有时候需要多线程执行完后才能执行其他的任务。这种情况下 我们就需要判断多线程什么时候执行完。
方法一 isTerminated
使用isTerminated来判断所有任务都已完成,会返回true。但是前提是启用shutdown顺序关闭。
shutdown
void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
抛出:
SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持RuntimePermission(“modifyThread”)),或者安全管理器的 checkAccess 方法拒绝访问。
isTerminated
boolean isTerminated()
如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。
返回:
如果关闭后所有任务都已完成,则返回 true
方法二CountDownLatch
CountDownLatch是一个同步辅助类,用来判断多线程是否执行完成。
它的原理是首先声明一共运行多少个线程任务,然后每完成一个线程任务,计数器就减一,当计数器等于0,说明所有的多线程都运行完成了。
主要方法
public CountDownLatch(int count);
public void countDown();
public void await() throws InterruptedException

构造方法参数指定了计数的次数
countDown方法,当前线程调用此方法,则计数减一
await方法,调用此方法会一直阻塞当前线程,直到计时器的值为0。
使用方法
如果你确定了你开启的线程数。
那么在主程序运行前。
CountDownLatch countdown = new CountDownLatch(10);//这里的10就是你的子线程数。
在每个子线程结束后,调用 countdown.countDown();
在主线程里启动子线程的方法后面添加。
countdown.await();//这里进行同步等待
等所有子线程结束后,执行 countdown.await()后面的代码。