java中线程 Thread和Runnable问题

麻烦前辈们看一下我这两个方法为什么次线程都没被激活而且我多次运行后发现有时候会出现:主1,次1,次2,次3,次4,主2,主3,主4。如果次线程被激活不是应该是:主1,次1... 麻烦前辈们看一下 我这两个方法 为什么 次线程都没被激活 而且我多次运行后发现 有时候会出现:主1,次1,次2,次3,次4,主2,主3,主4。 如果次线程被激活不是应该是:主1,次1,主2,次2,主3,次3,主4,次4 的吗 展开
 我来答
xjx1024
2013-07-18 · TA获得超过163个赞
知道答主
回答量:68
采纳率:0%
帮助的人:57.9万
展开全部
你问的这个,其实有点复杂。我大致给你作以下回答。
首先,在java虚拟机中,线程是基本的调度单位,而就绪线程将抢占虚拟机资源(这里资源是CPU,因为就绪线程只需要获得CPU,便可运行)以进行运行,具体抢占的方式,要根据虚拟机的调度算法,如果两者优先级基本一样,那很可能对于用户而言,是随机的。因此来说,你所写的这个第二线程以及主线程的执行顺序,是不一定的,即,你所说的两者,都是可能发生的,也可能发生别的情况。
其次,我们可以注意到,你所写的主线程和第二线程的主要逻辑,其实都是打印一句话,你想象中,可能说两个线程会按时间片或者什么的调度进行运行,因此主次交替地执行。
但这只是及其理想的情况:即在线程的调度时,没有什么额外开销,但实际上是有的,而且相较于这种简单的程序行为,调度开销还是很大的,因此虚拟机的优化的其中一项,就是在它认为应该调度的时候,才会进行调度,所以我们看到,很有可能在次线程开始执行后,虚拟机认为完全可以将它全部执行完,再调度主线程。
这应该是你所问的答案吧……
shencaiz
2013-07-18 · TA获得超过1132个赞
知道小有建树答主
回答量:758
采纳率:0%
帮助的人:371万
展开全部

你的

new Thread(new SecondaryRunnable()).start();
是否应该放在for()的循环体内?
更多追问追答
追问
请问下 是放在主线程的循环内 还是次线程的
追答
main方法里的那个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
x369201170
2013-07-18 · TA获得超过426个赞
知道小有建树答主
回答量:570
采纳率:0%
帮助的人:366万
展开全部
线程的运行是没有顺序而言的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式