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)
            }
        }
    }
}
相关推荐
Kapaseker2 小时前
一杯美式搞定 Kotlin 空安全
android·kotlin
FunnySaltyFish20 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker1 天前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker2 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z4 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton4 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream5 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam5 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker5 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc6 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite