新手问题 输出和预想的不一样呢

drine · 2013年09月18日 · 最后由 DrinE 回复于 2013年09月19日 · 2040 次阅读

x = Thread.new { sleep 0.1; print "x"; print "y"; print "z" } a = Thread.new { print "a"; print "b"; sleep 0.2; print "c" }

ruby 2.0.0 下的结果是只输出 a

不是应该输出 ab 吗?是因为打印了 a 后主程序就运行完,线程就被终止了?

有可能什么都不输出,有可能输出 a, 也有可能输出 ab.

#1 楼 @zgm why why why ...

#3 楼 @zgm 这答案让我很难过。。。
:(

想要更难过么?那么把你代码放到 irb 里面跑一下吧 LOL

#5 楼 @ch3n how to 放。。

先运行 irb 再运行 这 2 行. 或在最后加一句 sleep 1

#7 楼 @sevk 怎么会这样。。我彻底混乱了。。。。为什么啊 之前没试过 irb..小白一个..

你的后续代码没有 join 到主进程里来 所以主进程不会管你的线程死活 主进程的代码运行完了就结束了

在 1.9.3 下是输出 ab

x = Thread.new { sleep 0.1; print "x"; print "y"; print "z" } a = Thread.new { print "a"; print "b"; sleep 0.2; print "c" } sleep 1

#8 楼 @DrinE

linux 哲学:主线程不管其他线程的死活。

就像 linux 系统里面,你开个命令行 terminal 运行记事本或其他程序,如果关闭命令行 terminal,记事本也被结束掉了。(没指定记事本后台运行 nohup 或 & )

而 windows 系统是不会结束记事本的。

#13 楼 @sevk #9 楼 @zj0713001 谢谢。。之后在其他资料里也找到答案

需要 登录 后方可回复, 如果你还没有账号请 注册新账号