kotlin协程GlobalScope.launch启动
需要在pom.xml添加kotlin的引用:
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core</artifactId>
<version>1.6.4</version>
</dependency>
一段简单的kotlin协程代码:
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
fun main(args: Array<String>) {
for (i in 0 until 10) {
GlobalScope.launch {
delay(100)
var t = System.currentTimeMillis()
println("$t - $i ")
}
}
Thread.sleep(5_000)
}
输出:
1677504293898 - 6
1677504293899 - 1
1677504293899 - 2
1677504293899 - 5
1677504293898 - 0
1677504293899 - 3
1677504293900 - 7
1677504293900 - 4
1677504293901 - 9
1677504293901 - 8
像Java线程一样,kotlin协程并发执行。for循环最先循环从0开始,但投入时间上看,(1677504293898)- 0 线程,在并发执行过程中,被并发调度到后面执行。
如果没有故意让程序阻塞5秒,
Thread.sleep(5_000)
则控制台没有任何输出,kotlin协程在launch时候启动一个协程,不阻塞线程,main主函数迅速运行完成,并退出,但此时在for循环启动的线程还没有运行输出就因为main主线程的退出而不可见(系统销毁)。总结起来,GlobalScope 启动的协程相当于守护线程,不会阻止 JVM 结束运行退出程序。
GlobalScope.launch 创建一个顶级协程,它很轻,但运行时还是会消耗内存资源,且可以一直运行直到整个应用程序停止退出,这很可能导致内存泄露,谨慎使用 GlobalScope。