请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

守护线程那里没搞懂。

为什么开启守护线程 resume就不执行了?那岂不是协程永远都是挂起状态么?
既然守护线程导致该协程永远被挂起,为啥 加了 join 就又调了resume?join无非就是注册了一个回调而已呀。他能影响到守护线程吗?老师能讲一下这块么。

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

1回答

bennyhuo 2020-10-02 07:10:23

守护线程在主线程执行完以后,进程就直接退出了,resume就来不及执行了。

在suspend main当中调用join,会一直等协程执行完才会退出。

1 回复 有任何疑惑可以回复我~
  • 提问者 慕前端9039556 #1
    调用了join,守护线程会等待,说明了join的调用会导致main线程没执行完。
    可是join就是往disposableList注册了一个监听器。然后等待被回调。这个操作好像也不会影响到main线程执行吧
    回复 有任何疑惑可以回复我~ 2020-10-02 09:16:45
  • bennyhuo 回复 提问者 慕前端9039556 #2
    调用了join不是守护线程会等待。调用了join以后,join本身因为注册了一个完成回调,因此会挂起直到job执行完。
    
    这时请注意suspend main函数本身是启动了一个线程的,这个协程当中遇到挂起函数会调用Object.wait等待,直到挂起函数恢复执行。
    回复 有任何疑惑可以回复我~ 2020-10-02 13:02:54
  • bennyhuo 回复 提问者 慕前端9039556 #3
    suspend main函数的原理我在 11-12节专门做了分析,同学应该看过了吧。
    回复 有任何疑惑可以回复我~ 2020-10-02 13:03:40
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信