Concurrency and Source Panels
Thread Result Slots
Run named thread functions and store their results in stable slots before joining.
Thread Result Slots
ThreadResultSlots.kt
fun fillDouble(seed: Int, results: IntArray) {
val doubled = seed * 2
results[0] = doubled
}
fun fillTriple(seed: Int, results: IntArray) {
val tripled = seed * 3
results[1] = tripled
}
fun main() {
val seed =
val results = IntArray(2)
val first = Thread { fillDouble(seed, results) }
val second = Thread { fillTriple(seed, results) }
first.start()
second.start()
first.join()
second.join()
val total = results[0] + results[1]
println("seed=$seed")
println("total=$total")
}
fun fillDouble(seed: Int, results: IntArray) {
val doubled = seed * 2
results[0] = doubled
}
fun fillTriple(seed: Int, results: IntArray) {
val tripled = seed * 3
results[1] = tripled
}
fun main() {
val seed =
val results = IntArray(2)
val first = Thread { fillDouble(seed, results) }
val second = Thread { fillTriple(seed, results) }
first.start()
second.start()
first.join()
second.join()
val total = results[0] + results[1]
println("seed=$seed")
println("total=$total")
}
fun fillDouble(seed: Int, results: IntArray) {
val doubled = seed * 2
results[0] = doubled
}
fun fillTriple(seed: Int, results: IntArray) {
val tripled = seed * 3
results[1] = tripled
}
fun main() {
val seed =
val results = IntArray(2)
val first = Thread { fillDouble(seed, results) }
val second = Thread { fillTriple(seed, results) }
first.start()
second.start()
first.join()
second.join()
val total = results[0] + results[1]
println("seed=$seed")
println("total=$total")
}
thread result
Threads may finish in either order, so shared examples should put results in predictable positions before the main thread reads them.