为什么operation.map(启动线程).foreach(join())在kotlin中工作?
我一直在试图find一个解释,为什么这在kotlin工程:
(1..100).map { launch { System.out.println("Hello from on ${Thread.currentThread().name}") delay(100) } }.forEach { it.join() }
在Java中,这将:
- 开始线程1
- 加入线程1 – 在这里阻塞,永远不会启动超过1个线程。
在kotlin这个进程并行的multithreading。
为什么这个工作?
map
调用在forEach
之前终止,因此每次launch
都会在第一次join
之前调用(在forEach
)。 这些收集操作不像Java的Streams那样工作。 阅读此答案以获取更多信息。
在Kotlin里是这样的:
-
launch
协程1-100 -
join
协程1-100