A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 alvinbx 于 2014-8-11 19:27 编辑

刚才试验了十次,主线程的代码都比子线程先运行完(虽然期间有交叉运行),是不是主线程的代码一定会先比子线程先执行完的啊?因为我试验的是打印东西,所以不确定。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

正序浏览
alvinbx 发表于 2014-8-4 18:09
我刚才试了十次,子线程一抢到CPU就又给主线程抢走了,所以我觉得主线程抢cpu会厉害点。你报的是哪一期的 ...

赞分中,还没报呢。
回复 使用道具 举报
开启新线程之前 主线程分配的时间还未完 :lol
回复 使用道具 举报
alvinbx 发表于 2014-8-4 18:09
我刚才试了十次,子线程一抢到CPU就又给主线程抢走了,所以我觉得主线程抢cpu会厉害点。你报的是哪一期的 ...

多线程具有随机性,虽然可以从大量实验中得出统计规律,但10次太少了,说明不了问题。不过,具体到你所用的操作系统和JDK版本,是可能出现你说的情况的,而换到别人机器上又不一样了。所以,对多线程程序来说,非常重要的一点就是,除非你用了同步锁、wait、sleep、join、interrupt等线程操控方式,否则不要对线程的执行顺序和执行时间作任何假定。
回复 使用道具 举报
alvinbx 发表于 2014-8-4 18:09
我刚才试了十次,子线程一抢到CPU就又给主线程抢走了,所以我觉得主线程抢cpu会厉害点。你报的是哪一期的 ...

你可以将主线程的循环弄多些,一个极端的例子就是将主线程无线循环,而子线程有限次打印,那么肯定是子线程线程先完。
回复 使用道具 举报
还没报,在攒技术分呢
回复 使用道具 举报
xiaoxiaofeng 发表于 2014-8-4 18:03
不会的,两者是靠抢占cpu来执行的,如果两者的优先权一样,则谁先谁后是随机的,因为主线程是先于子线程运 ...

我刚才试了十次,子线程一抢到CPU就又给主线程抢走了,所以我觉得主线程抢cpu会厉害点。你报的是哪一期的呀,才这么少技术分。42快开学了呢。我也太少了。
回复 使用道具 举报
不会的,两者是靠抢占cpu来执行的,如果两者的优先权一样,则谁先谁后是随机的,因为主线程是先于子线程运行了,所以在指令数差不多时,主线程一般先完。如果主线程的代码量多,指令多,则子线程会先完。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马