Kotlin中可以很方便的使用自定义线程池作为协程上下文,并且可以在不使用CountDownLatch
跟Callable
+
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 协程使用自定义线程池