主线程在分支线程运行完成之后执行

最近看了一些关于线程的东西,有一个题目挺有意思的,主线在其他线程运行完成之后执行。我们知道线程就是为了并行的去执行一些任务,但是如果一个任务多个线程在同时计算的时候,主线程最后输出,就会用到这个情况。

当时我条件反射就想到了countDownLatch来做,突然一想会不会还有其他的几种方法捏。这边我一共做出了五种方法,如果还有其他的方法,谢谢你留言告知。

1 使用countdownlatch;
缺点:事先必须知道要多少个线程,如果不知道有多少个线程,那么这个方法就没有办法。
优点:速度比较快。
2 使用jion。
缺点,效率比较低。
优点。这个会使得线程进行排序。可以按照特定的顺序进行执行。
3使用sleep
缺点:通过睡眠来满足条件,只要睡眠的时间足够大就可以达到这个效果。但是睡眠的时间不可估计。
优点:使用简单。
4使用Thread.activeCount()!=1这个方法来进行判断,现在正在存活的线程个数。
缺点:如果有本来这个系统就已经调用了多个线程,所以这个系统内就会有多个线程,判断存活线程数量可能就不太准确。而且如果存在时间任务线程,可能没有关闭,那么就一直会等待。
优点,可以不用管理有多少个线程,直到所有的线程都执行完毕才会结束。
5使用cyclicbarrier来进行等待。
缺点:事先必须知道有多少个线程,如果不知道有多少个线程也没有办法执行。
优点:可以使所有的方法执行到某一步后都暂停,等待所有的都到达这一步之后再继续执行。


代码我也写出来 你可以根据自己的需求选择打开这些注释。


                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值