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.