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)
            }
        }
    }
}
相关推荐
alexhilton7 小时前
Compose中初始加载逻辑究竟应该放在哪里?
android·kotlin·android jetpack
zhangphil21 小时前
Android Coil3图片解码Bitmap后存入磁盘,再次加载读磁盘Bitmap缓存
android·kotlin
书中有颜如玉1 天前
Kotlin Coroutines 异步编程实战:从原理到生产级应用
android·开发语言·kotlin
Kapaseker2 天前
Kotlin 的 internal 修饰符到底咋回事儿?
android·kotlin
Trustport2 天前
ArcGIS Maps SDK For Kotlin 加载Layout中的MapView出错
android·开发语言·arcgis·kotlin
好家伙VCC2 天前
# ARCore+ Kotlin 实战:打造沉浸式增强现实交互应用在
java·python·kotlin·ar·交互
catoop3 天前
Kotlin 协程在 Android 开发中的应用:定义、优势与对比
android·kotlin
Lsk_Smion3 天前
Hot100(开刷) 之 环形链表(II)-- 随机链表的复制 -- 翻转二叉树
java·后端·kotlin·力扣·hot100
喂_balabala3 天前
Kotlin-属性委托
android·开发语言·kotlin
Kapaseker3 天前
介绍一个新的 Compose 控件 — 浮动菜单
android·kotlin