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

来源:12-2 案例:仿官方框架实现 launch 2

慕妹2253574

2023-06-26

我想了下,

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

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

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

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

写回答

3回答

bennyhuo

2023-06-27

如果不是守护进程的话,进程不会退出。当然main函数里面如果不调用jobA.join,自然也不会等协程jobA执行完,但这不影响进程自身的退出。
0
2
bennyhuo
回复
慕妹2253574
好的,加油!
2023-06-28
共2条回复

bennyhuo

2023-06-27

同学有问题可以进一步交流哈,也建议把你的代码直接贴出来分析,免得我理解错你的意思。
0
0

bennyhuo

2023-06-27

join挂起的是当前协程,也就是说,
val jobA = launch ....
jobA.join()
这里挂起的并不是jobA,而是所在的协程。你的例子里面就是suspend main自己所在的协程。
0
0

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1760 学习 · 481 问题

查看课程