我正在创建一个只有一个线程的线程池执行程序,并在Kotlin程序中使用Kotlin的asCoroutineDispatcher()方法。当我从循环中启动多个协程并记录线程名称时,我看到了不同的名称-pool1-thread1,pool3-thread1,pool9-thread-1等。 为什么在池中使用单线程时会有多个线程? Kotlin是否以不同的方式管理线程池?
// this is executed in loop
fun executeTask(url: String) {
GlobalScope.launch {
val result = runAsync(url)
Log.d("coroutineCheck", "$url\t\tStatus:$result")
}
}
//some blocking n/w IO goes in this method
//I log the thread name here
suspend fun runAsync(url: String): String = withContext(Executors.newFixedThreadPool(1).asCoroutineDispatcher()) {
}
答案 0 :(得分:4)
您每次调用方法时都在调用bloc
,反复创建全新的池。
您将要共享相同的执行器。
model