【2023】Kotlin教程 第三篇 Kotlin进阶 第19章 协程 19.3 创建IntelliJ IDEA Gradle项目 19.3.4 挂起函数
【2023】Kotlin教程 第三篇 Kotlin进阶 第19章协程 19.3 创建IntelliJ IDEA Gradle项目 19.3.4 挂起函数
·
【2023】Kotlin教程

第三篇 Kotlin进阶
第19章 协程
协程与线程类似都可以处理并发任务。协程在很多语言中都支持,但Java没有协程支持,Kotlin支持协程编程。本章介绍协程。
19.3 创建IntelliJ IDEA Gradle项目
19.3.4 挂起函数
如果需要,开发人员也可以编写挂起函数,其实也很简单就在函数声明时候使用suspend关键字,示例如下:
suspend fun run(){
...
}
【注意】挂起函数只能在协程体中或其他的挂起函数中调用,不能在普通函数中调用,如下代码会发生编译错误。
fun main(){
run()
}
挂起函数不仅可以是顶层函数,还可以是成员函数,还可以是抽象函数,子类重写挂起函数后还应该是挂起的。示例代码如下:
abstract class SuperClass{
suspend abstract fun run()
}
class SubClass: SuperClass(){
override suspend fun run(){}
}
上述代码SubClass类实现了抽象类SuperClass的抽象挂起函数run,重写后它还是挂起函数。
示例代码如下:
package com.dingjiaxiong
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.lang.Math.random
/**
* @Projectname: Hello
* @Classname: `ch19.3.4`
* @Author: Ding Jiaxiong
* @Data:2023/4/4 15:32
*/
abstract class SuperClass {
abstract suspend fun run()
}
class SubClass : SuperClass() {
override suspend fun run() {}
}
suspend fun run(name: String) {
// 启动一个协程
for (i in 0..9) {
// 打印协程执行次数
println("子协程${name}执行第${i}次")
// 随机生成挂起时间
val sleepTime = (1000 * random()).toLong()
// 协程挂起
delay(sleepTime)
}
println("子协程${name}执行结束")
}
fun main() = runBlocking<Unit> {
// 启动一个协程1
val job1 = launch() {
com.dingjiaxiong.run("job1")
}
// 启动一个协程2
val job2 = launch {
com.dingjiaxiong.run("job2")
}
delay(10000L) // 主协程挂起
println("主协程结束。")
}
这个栗子中声明了一个挂起函数,创建并启动了两个协程,在它们的协程体中分别调用了run 函数。
更多推荐

所有评论(0)