为了账号安全,请及时绑定邮箱和手机立即绑定

join方法使其他线程都停止,也包括主线程吗?

join方法使其他线程都停止,也包括主线程吗?

正在回答

4 回答

这篇文章说得很清楚了。

当前的线程阻塞,等待调用join()的线程执行。当前的线程可以是 “调用了join()的线程之外的任意线程”。

java中的Thread类的join

join是Thread的实例方法,官方解释为:等待该线程终止。

其作用就是将调用join的线程优先执行,当前正在执行的线程阻塞,直到调用join方法的线程执行完毕或者被打断,主要用于线程之间的交互。

还有两个重载的方法:

1、join(long millis),等待该线程终止的时间最长为 millis 毫秒。为 0 意味着要一直等下去。

2、join(long millis, int nanos),等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒



1 回复 有任何疑惑可以回复我~

join不是让所有线程都停止,join只是让主线程停止。

看下面的代码,如果把thread.sleep注释掉,再运行,有一定概率程咬金打完都谢幕了,军队线程还在执行。

这说明join只是让主线程停止,而不是让所有线程都停止。这一点老师讲的应该是有误的。

https://img1.sycdn.imooc.com//5cc0073b0001ef5109610768.jpg

0 回复 有任何疑惑可以回复我~
#1

qq_慕圣2566072

如果你在军队战斗的线程中执行join方法呢?
2019-06-20 回复 有任何疑惑可以回复我~
#2

精慕门7595355

老师讲的有没问题我不知道,但我知道你的说法有问题:join不是让所有线程都停止,join只是让主线程停止。 你再看看,当程咬金的线程调用join()方法时,是不是再也没出现军队线程的执行过程? join()方法调用后是让其它线程等待当前进程结束,不代表当前进程结束后,其它进程也结束,所以程咬金打完了之后,军队还会打。
2019-07-17 回复 有任何疑惑可以回复我~

输出结束语的就是主线程,所以也包括

0 回复 有任何疑惑可以回复我~

是的,主线程把CPU控制权交出来给调用join()方法的线程。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
深入浅出Java多线程
  • 参与学习       186088    人
  • 解答问题       464    个

带你一起深入浅出多线程,掌握基础,展望进阶路线

进入课程

join方法使其他线程都停止,也包括主线程吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信