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)
            }
        }
    }
}
相关推荐
维克兜率天10 小时前
【维克】弹性策略:用“乖离率“捕捉超跌反弹
android·开发语言·python·深度学习·kotlin·量化
传奇开心果编程13 小时前
【用案例学Material 3 Expressive】第1课:从一封邮件开始,感受安卓设计新语言的表现力
android·学习·ui·kotlin·android jetpack
mmsx15 小时前
Android 状态保持:进程被杀、旋屏与后台任务的存活术
android·kotlin
传奇开心果编程1 天前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
花开路口1 天前
线程安全完全指南:从 Java 到 Kotlin,一文吃透并发编程
java·kotlin
hai_android1 天前
子 View 被压小时,如何向父容器"告状"?——MEASURED_STATE_TOO_SMALL 向上传递机制
android·kotlin·android jetpack
怪奇云呼军2 天前
从 ElevenLabs 看工具调用:闪电智能 Voice Agent 的企业集成验收设计
android·大数据·运维·服务器·网络·人工智能·kotlin
mmsx2 天前
Android UI 复用体系:泛型基类、骨架与插槽
android·kotlin
alexhilton2 天前
生命周期感知的多模块启动模式
android·kotlin·android jetpack
hai_android2 天前
LruCache 图片浏览器内存缓存
android·java·kotlin