请稍等 ...
×

采纳答案成功!

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

霍~霍~霍霍,霍老师有个疑问,我发现不管hello方法里面启动的线程是否是守护线程,都会直接结束,不会等待launch内协程结束。

我想了下,

1.suspend main 会启动一个协程A,加入join方法调用后 会将协程A挂起,在launch运行结束后会恢复协程A,所以launch才会执行完。

2.如果不调用join方法,suspend main 会启动的协程A不会真正的挂起,直接就运行结束了。所以launch内的log不会打印。

所以,launch 中协程能运行结束,与hello方法中的启动线程是否是守护线程没有关系。

麻烦霍老师看下是不是这样的。

正在回答

3回答

如果不是守护进程的话,进程不会退出。当然main函数里面如果不调用jobA.join,自然也不会等协程jobA执行完,但这不影响进程自身的退出。
0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹2253574 #1
    我是直接运行的老师的示例代码,没有注意到已经加入了Dispatchers.Default,其实已经切线程了,并且线程是守护线程。
    老师讲解的很棒,受益匪浅。
    回复 有任何疑惑可以回复我~ 2023-06-28 21:26:22
  • bennyhuo 回复 提问者 慕妹2253574 #2
    好的,加油!
    回复 有任何疑惑可以回复我~ 2023-06-28 23:51:17
bennyhuo 2023-06-27 10:54:42
同学有问题可以进一步交流哈,也建议把你的代码直接贴出来分析,免得我理解错你的意思。
0 回复 有任何疑惑可以回复我~
bennyhuo 2023-06-27 10:49:47
join挂起的是当前协程,也就是说,
val jobA = launch ....
jobA.join()
这里挂起的并不是jobA,而是所在的协程。你的例子里面就是suspend main自己所在的协程。
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信