> puts "Before join" > running = false > t.join > puts "After join" > puts "Program finished" Actually I just noticed that in my version the join is redundant. I only just woke up :) You would need join if you wrote something like this: running = true t = Thread.new do print "Thread started\n" #do_something sleep 10 #do_something_else print "Thread finished\n" end puts "Before join" t.join puts "After join" puts "Program finished" Hope that clears it up Ashley