Worker threads can compute independent results while the main thread waits and combines them in a predictable order.

Thread Result Collector

thread_result_collector.rb
worker_count = 
results = Array.new(worker_count)

workers = worker_count.times.map do |index|
  Thread.new do
    base = index + 1
    results[index] = base * 10
  end
end

workers.each(&:join)

total = results.sum
puts "workers=#{worker_count}"
puts "results=#{results.join(",")}"
puts "total=#{total}"
worker_count = 
results = Array.new(worker_count)

workers = worker_count.times.map do |index|
  Thread.new do
    base = index + 1
    results[index] = base * 10
  end
end

workers.each(&:join)

total = results.sum
puts "workers=#{worker_count}"
puts "results=#{results.join(",")}"
puts "total=#{total}"
worker_count = 
results = Array.new(worker_count)

workers = worker_count.times.map do |index|
  Thread.new do
    base = index + 1
    results[index] = base * 10
  end
end

workers.each(&:join)

total = results.sum
puts "workers=#{worker_count}"
puts "results=#{results.join(",")}"
puts "total=#{total}"
thread results Store each worker result in a fixed array slot, then join the workers before reading the final collection.