>   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