最近看了一些关于线程的东西,有一个题目挺有意思的,主线在其他线程运行完成之后执行。我们知道线程就是为了并行的去执行一些任务,但是如果一个任务多个线程在同时计算的时候,主线程最后输出,就会用到这个情况。
当时我条件反射就想到了countDownLatch来做,突然一想会不会还有其他的几种方法捏。这边我一共做出了五种方法,如果还有其他的方法,谢谢你留言告知。
1 使用countdownlatch;
缺点:事先必须知道要多少个线程,如果不知道有多少个线程,那么这个方法就没有办法。
优点:速度比较快。
2 使用jion。
缺点,效率比较低。
优点。这个会使得线程进行排序。可以按照特定的顺序进行执行。
3使用sleep
缺点:通过睡眠来满足条件,只要睡眠的时间足够大就可以达到这个效果。但是睡眠的时间不可估计。
优点:使用简单。
4使用Thread.activeCount()!=1这个方法来进行判断,现在正在存活的线程个数。
缺点:如果有本来这个系统就已经调用了多个线程,所以这个系统内就会有多个线程,判断存活线程数量可能就不太准确。而且如果存在时间任务线程,可能没有关闭,那么就一直会等待。
优点,可以不用管理有多少个线程,直到所有的线程都执行完毕才会结束。
5使用cyclicbarrier来进行等待。
缺点:事先必须知道有多少个线程,如果不知道有多少个线程也没有办法执行。
优点:可以使所有的方法执行到某一步后都暂停,等待所有的都到达这一步之后再继续执行。
代码我也写出来 你可以根据自己的需求选择打开这些注释。