节选自:开始使用Kotlin协程
本文主要介绍协程的用法, 以及使用协程能带来什么好处. 另外, 也会粗略提一下协程的大致原理.
本文的意义可能仅仅是让你了解一下协程, 并愿意开始使用它.
如果想彻底理解协程, 请查看官方文档, 官方文档链接将在文章的结尾给出.
如果你以前在别的语言里学习过协程, 如Python的yield, 那请你先忘记它们, 毕竟还是有些区别, 等你弄懂了Kotlin的协程, 再去作对比, 否则, 可能会有一些先入为主的思路来阻碍你理解, 我就吃过这个亏.
初识协程:
首先我们来瞄一眼协程是长啥样的, 以下引用(copy)了官网的一个例子:
fun main(args: Array<String>) { launch(CommonPool) { delay(1000L) println("World!") } println("Hello,") Thread.sleep(2000L) } /* 运行结果: ("Hello,"会立即被打印, 1000毫秒之后, "World!"会被打印) Hello, World! */
姑且不管里面具体的细节, 上面代码大体的运行流程是这样的:
A. 主流程:
1.调用系统的launch方法启动了一个协程, 跟随的大括号可以看做是协程体.
(其中的CommonPool暂且理解成线程池, 指定了协程在哪里运行)
2.打印出”Hello,”
3.主线程sleep两秒
(这里的sleep只是保持进程存活, 目的是为了等待协程执行完)
B. 协程流程:
1.协程延时1秒
2.打印出”World!”
解释一下delay方法:
在协程里delay方法作用等同于线程里的sleep, 都是休息一段时间, 但不同的是delay不会阻塞当前线程, 而像是设置了一个闹钟, 在闹钟未响之前, 运行该协程的线程可以被安排做了别的事情, 当闹钟响起时, 协程就会恢复运行.