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")
}
创建一个协程,且会一直阻塞到协程逻辑执行完,主线程才会继续执行。