协程(kotlinx.coroutines )是由 JetBrains 开发的功能丰富的协程库。它包含Kotlin很多启用高级协程的原语,包括 launch、 async 等等。

Kotlin Maven引入
<dependency>
    <groupId>org.jetbrains.kotlinx</groupId>
    <artifactId>kotlinx-coroutines-core</artifactId>
    <version>1.4.1</version>
</dependency>
Kotlin Anroid Gradle 引入
  1. 在父类中的build.gradle引入
repository {
    jcenter()
}

  1. 在app中的build.gradle引入
<dependency>
    <groupId>org.jetbrains.kotlinx</groupId>
    <artifactId>kotlinx-coroutines-core</artifactId>
    <version>1.4.1</version>
</dependency>

  1. Kotlin第一个程序
    在 GlobalScope 中启动了一个新的协程,这表示新协程的生命周期只受整个应用程序的生命周期限制。
    delay 是一个特殊的 挂起函数 ,它不会造成线程阻塞,但是会 挂起 协程,并且只能在协程中使用。
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

fun main() {

    GlobalScope.launch {//后台启动一个新的协程并启动
        delay(1000)
        println("========>Hello,coroutines")
    }
    println("Hello")// 主线程中的代码会立即执行
    runBlocking {// ===》这个表达式阻塞了主线程
        delay(2000) //延迟 2 秒来保证 JVM 的存活
    }

}

这里用了 非阻塞的 delay(……) 与 阻塞的 Thread.sleep(……)。 这容易让我们记混哪个是阻塞的、哪个是非阻塞的
4.Kotlin主协程

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {// 开始执行主协程

    GlobalScope.launch { // 在后台启动一个新的协程并继续
        delay(1000L)
        println("World!")
    }

    println("Hello,") // 主协程在这里会立即执行
    delay(2000L)      // 延迟 2 秒来保证 JVM 存活

}

这里 调用了 runBlocking 的主线程会一直 阻塞 直到 runBlocking 内部的协程执行完毕。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐