Kotlin线程池newFixedThreadPoolContext与约束协程运行的线程数量limitedParallelism

Kotlin线程池newFixedThreadPoolContext与约束协程运行的线程数量limitedParallelism

Kotlin 复制代码
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.newFixedThreadPoolContext
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {
        //应用全局协的总线程数量
        val MAX_SIZE = 4
        val allDispatcher = newFixedThreadPoolContext(MAX_SIZE, "全局")

        //val limitedDispatchers=Dispatchers.Default.limitedParallelism(MAX_SIZE)
        //launch(limitedDispatchers){
        //}

        val SLEEP_TIME = 1L

        //假设有一个高优先级任务hightTask,最多可以跑在MAX_SIZE个线程中。
        //只要MAX_SIZE个线程中任何一个线程有空闲,就可以调度运行。
        val highTask = allDispatcher.limitedParallelism(MAX_SIZE)
        async(highTask) {
            repeat(Int.MAX_VALUE) {
                println("high tid=${Thread.currentThread().name}")
                delay(SLEEP_TIME)
            }
        }

        //假设有一个中等优先级任务的mediumTask,最多可以跑在2个线程中。
        //只要MAX_SIZE-2个线程中任何一个线程有空闲,就可以调度运行。
        val mediumTask = allDispatcher.limitedParallelism(MAX_SIZE - 2)
        async(mediumTask) {
            repeat(Int.MAX_VALUE) {
                println("medium tid=${Thread.currentThread().name}")
                delay(SLEEP_TIME)
            }
        }

        //假设有一个低等优先级任务的lowTask,最多可以跑在1个线程中。
        //只要MAX_SIZE-3个线程中任何一个线程有空闲,就可以调度运行。
        val lowTask = allDispatcher.limitedParallelism(MAX_SIZE - 3)
        async(lowTask) {
            repeat(Int.MAX_VALUE) {
                println("low tid=${Thread.currentThread().name}")
                delay(SLEEP_TIME)
            }
        }
    }
}
相关推荐
__Yvan1 小时前
Kotlin 的 ?.let{} ?: run{} 真的等价于 if-else 吗?
android·开发语言·前端·kotlin
tangweiguo030519872 小时前
Android WorkManager 完整实战教程(含完整文件)
android·kotlin
顾道长生'7 小时前
(Arxiv-2026)HiAR:基于分层去噪的高效自回归长视频生成
回归·kotlin·音视频·长视频生成
Kapaseker7 小时前
Compose 中 CompositionLocalProvider 到底是干啥的
android·kotlin
陆业聪1 天前
让 Android 里的 AI 真正「干活」:Function Calling 工程实现全解
android·ai·kotlin
千码君20161 天前
kotlin:函数式参数
java·算法·kotlin
Kapaseker1 天前
Window 内外藏机巧 旧岗新页见真章
android·kotlin
蹦哒2 天前
Kotlin 与 Java 语法差异
java·python·kotlin
Kapaseker2 天前
五分钟搞定 Compose 的打字机效果
android·kotlin
Fate_I_C2 天前
Android现代开发:Kotlin&Jetpack
android·开发语言·kotlin·android jetpack