直接运行下面的代码:
fun testThread() {
val jobs = List(100_1000) {
Thread({
Thread.sleep(1000L)
print(".")
})
}
jobs.forEach { it.start() }
jobs.forEach { it.join() }
}
我们应该会看到输出报错:
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:714)
at com.easy.kotlin.LightWeightCoroutinesDemo.testThread(LightWeightCoroutinesDemo.kt:30)
at com.easy.kotlin.LightWeightCoroutinesDemoKt.main(LightWeightCoroutinesDemo.kt:40)
...........................................................................................
我们这里直接启动了100,000个线程,并join到一起打印”.”, 不出意外的我们收到了 java.lang.OutOfMemoryError。
这个异常问题本质原因是我们创建了太多的线程,而能创建的线程数是有限制的,导致了异常的发生。在Java中, 当我们创建一个线程的时候,虚拟机会在JVM内存创建一个Thread对象同时创建一个操作系统线程,而这个系统线程的内存用的不是JVMMemory,而是系统中剩下的内存(MaxProcessMemory - JVMMemory - ReservedOsMemory)。 能创建的线程数的具体计算公式如下:
Number of Threads = (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize)
其中,参数说明如下:
![](data:image/png;base64,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)
我们通常在优化这种问题的时候,要么是采用减小thread stack的大小的方法,要么是采用减小heap或permgen初始分配的大小方法等方式来临时解决问题。
在协程中,情况完全就不一样了。我们看一下实现上面的逻辑的协程代码:
fun testLightWeightCoroutine() = runBlocking {
val jobs = List(100_000) {
// create a lot of coroutines and list their jobs
launch(CommonPool) {
delay(1000L)
print(".")
}
}
jobs.forEach { it.join() } // wait for all jobs to complete
}
运行上面的代码,我们将看到输出:
START: 21:22:28.913
.....................
.....................(100000个)
.....END: 21:22:30.956
上面的程序在2s左右的时间内正确执行完毕。