Kotlin学习之协程

前言

协程是轻量级的线程。maven项目需要引入以下依赖

<!--kotlin基础库-->
<dependency>
  <groupId>org.jetbrains.kotlin</groupId>
  <artifactId>kotlin-stdlib-jdk8</artifactId>
  <version>${kotlin.version}</version>
</dependency>
<!--协程支持库-->
  <dependency>
  <groupId>org.jetbrains.kotlinx</groupId>
  <artifactId>kotlinx-coroutines-core</artifactId>
  <version>1.3.9</version>
</dependency>

非阻塞式协程

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

fun main() {
    GlobalScope.launch {  // 启动一个非阻塞协程
        delay(1000)       // 等待1秒钟
        println("协程")   // 在延迟后打印输出
    }
    println("Hello")     // 协程已在等待时主线程还在继续
    Thread.sleep(2000)   // 阻塞主线程2秒钟来保证JVM存活
    println("World")
}

协程在JVM主线程执行结束之后也会结束,所以需要主线程阻塞2秒钟来保证协程已经执行完毕了,使用线程的写法为

import kotlin.concurrent.thread

fun main() {
    thread {               // 创建一个线程
        Thread.sleep(1000) 
        println("协程")
    }
    println("Hello")
    Thread.sleep(2000)
    println("World")
}

非阻塞协程就类似于守护线程。

阻塞式协程

import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {    // 启动一阻塞式协程
        delay(1000)
        println("协程")
    }
    println("World")
}

创建一个协程,且会一直阻塞到协程逻辑执行完,主线程才会继续执行。

参考

Kotlin协程-官方文档

posted @ 2024-05-15 22:36  strongmore  阅读(4)  评论(0编辑  收藏  举报