Kotlin 协程(一)
1 什么是协程
协程可以看作轻量级的线程,可以在一个线程中挂起执行并在另一个线程中恢复,它在概念上与线程类似,但在实际使用时有很大差别
2 基本用法
fun main() = runBlocking {
// this: CoroutineScope
launch {
// launch a new coroutine and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println("World!") // print after delay
}
println("Hello") // main coroutine continues while a previous one is delayed
}
launch是协程的构造器,它与作用域里的代码同时启动一个新的协程,该协程独立工作,这也是为什么先打印出 “Hello”
delay是特殊的挂起功能,可以将协程暂停执行一段时间,挂起协程并不会阻塞底层线程的执行,但是允许其他协程使用和运行底层线程执行代码
runBlocking也是协程构造器,它连接main()中协程作用域和非协程作用域,在IDE中会在在 runBlocking 左大括号之后的 CoroutineScope 提示。如果忘记或删除runBlocking会报error,因为
launch必须在CoroutineScope中声明
runBlocking的名字意味着运行它的线程(本例中是主线程)会在运行期间被阻塞,直到它里面的所有协程都执行完毕。在实际开发中很少使用runBlocking,因为线程是很宝贵的资源,阻塞它们通常是低效的
3 结构化并发
协程遵循结构化并发的原则,这意味着新创建的协程只能运行在特定的CoroutineScope中,这个范围界定了协程的生命周期。上面的runBlocking就构建了一个相应的scope,