2.times{Thread.new{10.times{|i| print i;$stdout.flush;Thread.pass}}}
Thread.list.each{ |thread| thread.join nless . thread==Thread.main}
运行结果是:00112233445566778899
第二句我懂,请详解第一句。
类似的还有个句子 10.times {Thread.new{10.times . { |i| print . i . ;$stdout.flush; sleep . rand (2)}}}
运行结果大约为:0010100001012121312242325453233433655467765888689675567…999
这两个句子都想了我一个早上了,还望前辈们不吝赐教。。。。谢过了,先。。
我觉得这是你想要的 http://www.ruby-doc.org/core-1.9.3/Thread.html#method-i-join http://www.ruby-doc.org/core-1.9.3/Thread.html#method-c-pass
EDIT: 1.9.3
#2 楼 @leozwa 最近 goagent 用不了了,给得这两个连接点不开
楼主的代码真蛋疼,问问题以前,先把你的代码格式化一下呀。让大家好看点。
我不知道你在那里看到代码,很明显执行结果不是你说的那样,因为对 10 个数字迭代,太快了,Thread.pass 来不及执行完毕,迭代器已经返回。所以输出结果在我的电脑上总是: 01234567890123456789
01234567890123456789
改成下面这样才是你想要的结果:
thread1 = Thread.new{ 10.times {|i| print i;$stdout.flush; sleep(0.1); Thread.pass }} thread2 = Thread.new{ 10.times {|i| print i;$stdout.flush; sleep(0.1); Thread.pass }} thread1.join thread2.join # => 112233445566778899
回楼上:这个是《Begining Ruby:From novice to professional》(作 者:(美)库珀(Cooper,P.)著,仲田 等译)上的,可能是当时是 1.8 版本的,我在 1.9 上也得不出来,所以特意过来找前辈们闻一下子的。