为什么会被打断啊

为什么会被打断啊

不是调用join方法的存款 了吗?不应该等他执行完在执行下一个join方法取款吗?难道是立马写 个thread.sleep(1000)他这1000毫秒一过这join方法的优先级时间到了?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕小琪 2020-05-11 11:08:59

同学你好,

1.就是join只是会中断主线程而不会中断相同有join的另外的方法?

    同学的后半句理解是对的,前半句有一些偏差,join()方法会中断调用它的线程,在这里因为是主线程在调用,所以主线程被中断,如果是其他线程在调用就是其他线程被中断。

2.然后第一个有sleep时间到了后就会被第二个join方法抢资源

    这里是因为第一个线程sleep了或者有其他原因被打断了,它暂时失去了cpu资源,第二个线程就会抢占到cpu资源,与主线程中运行的join()方法无关,如果我们是在第一个线程中调用第二个线程的join()方法,那么第一个线程就会被join()方法中断,我们在主线程中运行两个线程的join()方法只是保证主线程是最后一个运行完毕的,这样存钱和取钱两个线程都能够在主线程执行完之前运行完毕从而得到最终结果。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~

好帮手慕小琪 2020-05-10 13:39:13

同学你好,老师根据同学的问题解释一下。

    join()方法会中断调用它的线程,而不会中断其他的线程。我们在之前已经启动了两个线程,第二个线程有可能在第一个线程没执行完就会执行。因为我们是在主线程中调用的join()方法,而在主线程中调用join()方法会让主线程中断,并不会让第二个线程中断,两者还会抢夺cpu资源执行自己的方法。所以当第一个线程sleep后,第二个线程会抢占资源执行自己的代码造成数据不一致。join()方法只是保证我们在main()方法中执行完两个线程之后可以得到最后的结果进行打印。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~

  • 提问者 一giao我勒giao #1
    就是join只是会中断主线程而不会中断相同有join的另外的方法? 然后第一个有sleep时间到了后就会被第二个join方法抢资源
    2020-05-10 19:14:12
苍星乱舞 2020-05-09 23:35:25

join方法会让调用的线程进入阻塞状态,在你这是主线程,主线程会等到join的线程执行完再执行。

你这save和draw只是比主线程先执行,两者之间还是会轮流获得CPU时间片

提问者 一giao我勒giao 2020-05-09 22:50:52

是不是一个join的时候他确实是先执行完才执行下个线程,而多个JOIN就不一定了?第一个JOIN还没执行完第二个就抢着执行导致断层?


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师