kotlin协程GlobalScope.launch启动

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。

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/129250518