前言:

Kotlin 协程是基于 Coroutine 实现的,其设计目的是简化异步编程。协程提供了一种方式,可以在一个线程上写起来像是在多个线程中执行。

协程的基本概念:

协程是轻量级的,不会创建新的线程。 协程会挂起当前的协程,而不会阻塞线程。 协程可以在suspend函数中暂停执行,并在暂停点恢复执行。

一、引包

${kotlin.version} : 1.8.21

注意:org.jetbrains.kotlinx 最新在1.6.0

org.jetbrains.kotlin

kotlin-stdlib-jdk8

${kotlin.version}

org.jetbrains.kotlin

kotlin-reflect

${kotlin.version}

org.jetbrains.kotlinx

kotlinx-coroutines-core

1.6.0

org.jetbrains.kotlin

kotlin-test

${kotlin.version}

test

二、 interface 定义

import com.baomidou.mybatisplus.extension.service.IService

import com.zc.bean.PriceBean

import org.springframework.stereotype.Repository

@Repository

interface TestKotlinService : IService {

//suspend 协程方法的定义

suspend fun test(): String

fun te()

}

三、Ipml 实现

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl

import com.zc.bean.PriceBean

import com.zc.mapper.TestKotlinMapper

import kotlinx.coroutines.Dispatchers

import kotlinx.coroutines.delay

import kotlinx.coroutines.withContext

import lombok.extern.slf4j.Slf4j

import org.springframework.stereotype.Service

/**

* @author zc

* @date 2024/4/18 9:56

* @desc

*/

@Service

@Slf4j

open class TestKotlinServcieImpl : ServiceImpl(), TestKotlinService{

//withContext 切换到指定的线程(IO线程)

override suspend fun test() = withContext(Dispatchers.IO){

delay(10000)

println("suspend")

return@withContext "success"

}

override fun te(){

println("test")

}

}

四、controller 

/**

* @author zc

* @date 2024/4/18 10:38

* @desc

*/

@RestController

@RequestMapping("/price")

@Tag(name = "kotlin")

class TestKotlinController {

@Autowired

private lateinit var testKotlinService: TestKotlinService;

@GetMapping("test")

fun testScope(){

println("start")

testKotlinService.te()

//创建协程,并在io线程上执行

val coroutineScope = CoroutineScope(Dispatchers.IO)

coroutineScope.launch {

//async/await获取返回值

// val result = async { testKotlinService.test() }.await()

val result =

withContext(Dispatchers.IO) { testKotlinService.test() }

println("result: $result")

}

println("end")

}

}

五、测试

调用swagger 接口测试,在等待10秒后打印出suspend result: success,异步调用成功

六、学习文档:

文档 · Kotlin 官方文档 中文版

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。