1. 协程
协程允许我们在单线程模式下模拟模拟多线程编程的效果,代码执行时的挂起与恢复完全是由 编程语言控制的,和操作系统无关
1. 协程的3种启动方式
- launch
launch是最常用的方式,它会立即返回一个Job对象,可以用它来取消协程或者检查其状态 如果需要启动一个独立的协程,并且不关心其结果和异常,最好是用launch
// 启动一个协程
fun main() = runBlocking {
val job = launch {
delay(1000L)
println("World!")
}
println("Hello,")
job.join() // 等待协程完成
}
-
- runBlocking
runBlocking是一个阻塞式函数,主要用于测试和调试 它会启动一个新的协程,并等待该协程执行完毕后才会返回,同时会阻塞当前的线程
- runBlocking
fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello,")
}
-
- async
async用于启动一个协程,并返回deferred对象,通过该对象可以获取协程的执行结果 deferred可以被取消,并且提供了await获取其结果
- async
fun main() = runBlocking {
val deferred = async {
delay(1000L)
"World!"
}
deferred.await()
println("Hello, ${deferred.await()}") // 等待协程完成并获取结果
}