Store values produced by two threads in separate result slots.

Thread Result Slots

ThreadResultSlots.scala
object Main {
  var left = 0
  var right = 0

  def leftWork(seed: Int): Unit = {
    left = seed + 4
  }

  def rightWork(seed: Int): Unit = {
    right = seed * 3
  }

  def main(args: Array[String]): Unit = {
    val seed = 

    val first = Thread(() => leftWork(seed))
    val second = Thread(() => rightWork(seed))

    first.start()
    second.start()
    first.join()
    second.join()

    val total = left + right
    println("left=" + left)
    println("right=" + right)
    println("total=" + total)
  }
}
object Main {
  var left = 0
  var right = 0

  def leftWork(seed: Int): Unit = {
    left = seed + 4
  }

  def rightWork(seed: Int): Unit = {
    right = seed * 3
  }

  def main(args: Array[String]): Unit = {
    val seed = 

    val first = Thread(() => leftWork(seed))
    val second = Thread(() => rightWork(seed))

    first.start()
    second.start()
    first.join()
    second.join()

    val total = left + right
    println("left=" + left)
    println("right=" + right)
    println("total=" + total)
  }
}
object Main {
  var left = 0
  var right = 0

  def leftWork(seed: Int): Unit = {
    left = seed + 4
  }

  def rightWork(seed: Int): Unit = {
    right = seed * 3
  }

  def main(args: Array[String]): Unit = {
    val seed = 

    val first = Thread(() => leftWork(seed))
    val second = Thread(() => rightWork(seed))

    first.start()
    second.start()
    first.join()
    second.join()

    val total = left + right
    println("left=" + left)
    println("right=" + right)
    println("total=" + total)
  }
}
thread-result Two threads can update independent fields, then the main thread joins them and reads the final scalar results.