Kotlin 协程使用自定义线程池

Kotlin中可以很方便的使用自定义线程池作为协程上下文,并且可以在不使用CountDownLatchCallable+Future的情况下更简单的实现主线程等待线程池中任务执行完毕的需求。

首先我们将协程的依赖加入pom.xml

<dependency>
     <groupId>org.jetbrains.kotlinx</groupId>
     <artifactId>kotlinx-coroutines-core</artifactId>
     <version>1.2.2</version>
</dependency>

然后新建Test.kt,内容如下:

import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.util.concurrent.Executors

fun main() {
    runBlocking {
        //创建自定义线程池
        val coroutineDispatcher = Executors.newFixedThreadPool(3).asCoroutineDispatcher()
        launch {
            //在父协程中创建子协程
            repeat(5) {
                //使用自定义线程池执行协程
                async(coroutineDispatcher) {
                    Thread.sleep(1000)
                    println("${Thread.currentThread().name}")
                }
            }
        }.join()//等待子协程执行完毕
        //关闭自定义线程池
        coroutineDispatcher.close()
        println("子协程执行完啦!!!!")
    }
}

以上代码中首先创建了一个3个线程的定长线程池,然后经由launch创建一个同步协程作为父协程,接着在父协程内部循环创建了5个使用自定义线程池的异步子协程,最终由父协程的join()方法实现等待子协程全部执行完毕。当然,千万记得关闭线程池,以免造成不必要的资源浪费;建议将自定义线程池作为全局变量重复利用。

未经允许不得转载:鹞之神乐 » Kotlin 协程使用自定义线程池

赞 (0) 打赏

评论

2+6=

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏