level 1
11amok
楼主
执行这段代码,会发现输出1,3后就无响应了。
把第一行runBlocking改为GlobalScope.launch(Dispatchers.Main), 会正常输出1,3,2,4
通过这些现象,是否可以得出以下结论?:GlobalScope.launch(Dispatchers.Main) 启动的协程并不会马上执行,而是继续执行主线程后面的代码,直到空闲的时候才会运行该协程。
我的分析是,无响应是因为join的时候,让runBlocking这个协程挂起了,阻塞主线程。然而打印2的协程压根就还没执行,所以无限等待了。第一行改为GlobalScope.launch(Dispatchers.Main) 的话,join时挂起,不阻塞主线程,于是继续执行打印2的协程。2输出以后,挂起恢复,继续执行println("4")
runBlocking {
println("1")
val job = GlobalScope.launch(Dispatchers.Main) {
println("2")
}
println("3")
job.join()
println("4")
}
2020年01月09日 08点01分
1
把第一行runBlocking改为GlobalScope.launch(Dispatchers.Main), 会正常输出1,3,2,4
通过这些现象,是否可以得出以下结论?:GlobalScope.launch(Dispatchers.Main) 启动的协程并不会马上执行,而是继续执行主线程后面的代码,直到空闲的时候才会运行该协程。
我的分析是,无响应是因为join的时候,让runBlocking这个协程挂起了,阻塞主线程。然而打印2的协程压根就还没执行,所以无限等待了。第一行改为GlobalScope.launch(Dispatchers.Main) 的话,join时挂起,不阻塞主线程,于是继续执行打印2的协程。2输出以后,挂起恢复,继续执行println("4")
runBlocking {
println("1")
val job = GlobalScope.launch(Dispatchers.Main) {
println("2")
}
println("3")
job.join()
println("4")
}