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 是一个特殊的 挂起函数 ,它不会造成线程阻塞,但是会 挂起 协程,并且只能在协程中使用。

相关推荐
高晶6 分钟前
2A3 单端甲类功放从零制作全攻略:电路设计、焊接调试到煲机维护一站式指南
前端·设计模式
deli0078 分钟前
塔防游戏里怪物为什么绕远路?Canvas 实测 A* 寻路 20 波
前端
小万7428 分钟前
WHO 心理自助指南深度解析:Step-by-Step 与 Doing What Matters in Times of Stress,用循证协议重构心理韧性
前端
denlaku10 分钟前
JDK 15 新特性详解
java·开发语言
代码猎人11 分钟前
前端怎么优化用户体验
前端
deli00712 分钟前
批量加水印还在用在线工具?30 张图 Canvas 本地铺满实测
前端
鸿蒙开发13 分钟前
扫描 PDF 看得见却搜不到?用 Tesseract.js + PDF.js 生成可搜索 PDF
前端·react.js
小万74215 分钟前
ECC(Everything Claude Code)深度解析:把编程 Agent 从“聊天写代码”拉进工程现场的 Harness 系统
前端
用户21455493101520 分钟前
VeapAI 自然语言操作实战|第 02 篇:语义层——把系统讲给模型听的四个构件
前端·后端
滴滴答答哒20 分钟前
C# 技巧:优雅实现对象的“局部更新”与“字段合并”
开发语言·c#