Kotlin:协程基础

第一个协程程序
复制代码
import kotlinx.coroutines.*

fun main(){
    GlobalScope.launch {
        delay(1000L)//delay 是一个特殊的 挂起函数 ,它不会造成线程阻塞,但是会 挂起 协程,并且只能在协程中使用。
        println("World!")
    }
    println("Hello - ")// 主线程中的代码会立即执行
    Thread.sleep(2000L) // 阻塞主线程 2 秒钟来保证 JVM 存活

//    runBlocking {//但是这个表达式阻塞了主线程
//        delay(2000L)//我们延迟 2 秒来保证 JVM 的存活
//    }
}

本质上,协程是轻量级的线程。 它们在某些 CoroutineScope 上下文中与 launch 协程构建器 一起启动。 这里我们在 GlobalScope 中启动了一个新的协程,这意味着新协程的生命周期只受整个应用程序的生命周期限制。

可以将 GlobalScope.launch { ...... } 替换为 thread { ...... },并将 delay(......) 替换为 Thread.sleep(......) 达到同样目的。 试试看(不要忘记导入 kotlin.concurrent.thread)。

如果你首先将 GlobalScope.launch 替换为 thread,编译器会报以下错误:

Error: Kotlin: Suspend functions are only allowed to be called from a coroutine or another suspend function

这是因为 delay 是一个特殊的 挂起函数 ,它不会造成线程阻塞,但是会 挂起 协程,并且只能在协程中使用。

相关推荐
覆东流4 分钟前
Java开发环境搭建
java·开发语言·后端
阿洛学长7 分钟前
VMware安装虚拟机教程(超详细)
java·linux·开发语言
rit84324997 分钟前
链路预测(Link Prediction)MATLAB 实现
开发语言·matlab
jiayong238 分钟前
01 检查 Python 版本与环境
开发语言·python
wuhen_n10 分钟前
LangChain Function Call 实战:让 AI 调用自定义工具
前端·langchain·ai编程
Refrain_zc10 分钟前
Android 音视频通话核心二 —— 音频解码详解记录
kotlin
DyLatte14 分钟前
很多人把坚持,误以为成长
前端·后端·程序员
就叫_这个吧23 分钟前
Java普通类、抽象类、接口的应用和区别
java·开发语言
yingyima25 分钟前
凌晨3点的警报声:定时任务监控与告警的最佳实践
前端
梅孔立26 分钟前
解决Nginx缓存不写入响应体问题:浏览器强制不缓存配置教程
java·开发语言·nginx·spring