多线程相关问题

TanXY_915 2017-06-05 02:21:24
如图,在代码中设置了i = 2 的时候创建线程 ,结果出来却不是i= 2 的时候,并且每一次运行还不是固定的。
是因为new ,start 之后创建了新线程,新线程位于就绪状态,等待CPU安排执行吗?

...全文
264 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
戴小码 2017-06-08
  • 打赏
  • 举报
回复
想顺序输出的话可以尝试设置下线程的优先级,但是cpu也并不能保证绝对按你设置的执行,只是资源更多的 倾向于优先级较高的线程。
丄whistle 2017-06-07
  • 打赏
  • 举报
回复
.start()只是让线程处于可运行状态,并不是立刻就运行
xuziliangzz 2017-06-07
  • 打赏
  • 举报
回复
创建不等于被CPU调度,他要等CPU的时间片轮转然后去抢夺CPU的使用权,不幸的是他并没能在i==5的时候抢到。简单暴力就是让主线程在i==5的时候去睡一会,让新建的线程能够获得调度。在启动新线程后加个Thread.sleep(100); 让主线程睡一会,这样兔子去睡觉了,乌龟自然夺得冠军了。
Talentc111 2017-06-07
  • 打赏
  • 举报
回复
就像你说的,当你start一个线程并不是开始而是代表你这个线程已经准备好了,接下来就看cpu了
TanXY_915 2017-06-05
  • 打赏
  • 举报
回复
引用 1 楼 HinanaiTenshi 的回复:
多线程之间的调度并非是顺序的,程序没强制干预的话,调度顺序是不可知的。 另外,你设置的不是i==5吗? 哪儿来的==2啊。
哦,哈哈,这个是因为我开始用的2 ,因为出来不是2所以换成5看了看。 谢谢哦~
HinanaiTenshi 2017-06-05
  • 打赏
  • 举报
回复
多线程之间的调度并非是顺序的,程序没强制干预的话,调度顺序是不可知的。 另外,你设置的不是i==5吗? 哪儿来的==2啊。

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧