为什么 operation.map(launch thread).foreach(join()) 在 kotlin 中工作?
why does operation.map(launch thread).foreach(join()) work in kotlin?
我一直在努力寻找关于为什么这在 kotlin 中有效的解释:
(1..100).map {
launch {
System.out.println("Hello from on ${Thread.currentThread().name}")
delay(100)
}
}.forEach { it.join() }
在 java 这将:
- 启动线程 1
- 加入线程 1 - 并在此处阻塞,永远不会启动超过 1 个线程。
在 kotlin 中,这个过程在多个线程上并行进行。
为什么这样做?
map
调用在 forEach
之前终止,因此每个 launch
将在第一个 join
(在 forEach
内)之前被调用。这些 集合操作 不像 Java 的流那样工作。阅读此 了解更多信息。
在 Kotlin 中是这样的:
launch
协程1-100
join
协程1-100
我一直在努力寻找关于为什么这在 kotlin 中有效的解释:
(1..100).map {
launch {
System.out.println("Hello from on ${Thread.currentThread().name}")
delay(100)
}
}.forEach { it.join() }
在 java 这将:
- 启动线程 1
- 加入线程 1 - 并在此处阻塞,永远不会启动超过 1 个线程。
在 kotlin 中,这个过程在多个线程上并行进行。
为什么这样做?
map
调用在 forEach
之前终止,因此每个 launch
将在第一个 join
(在 forEach
内)之前被调用。这些 集合操作 不像 Java 的流那样工作。阅读此
在 Kotlin 中是这样的:
launch
协程1-100join
协程1-100