为了账号安全,请及时绑定邮箱和手机立即绑定

两个无关线程的运行结果互相包含对方内容

两个无关线程的运行结果互相包含对方内容

慕尼黑的夜晚无繁华 2019-02-14 14:10:00
两个无关线程的运行结果互相包含对方内容是怎么回事?代码如下:public class NumberThread extends Thread {private int first;public NumberThread(String name, int first) {    super(name);    this.first = first;}public NumberThread(String name) {    this(name, 0);}public void run() {    System.out.print("\n"+this.getName()+": ");    for(int i=first;i<50;i+=2) {        System.out.print(i+" ");    }    System.out.print(this.getName()+"Finish!");}public static void main(String args[]) {    System.out.println("Current thread ="+Thread.currentThread().getName());    NumberThread thread_odd = new NumberThread("奇数线程", 1);    NumberThread thread_even = new NumberThread("偶数线程", 2);    thread_even.start();    thread_odd.start();    System.out.println("activityCount="+thread_even.activeCount());}}运行结果:Current thread =mainactivityCount=3偶数线程: 2 4 6 奇数线程: 8 1 10 3 5 7 9 11 13 15 17 19 21 12 23 14 25 16 27 18 29 20 31 22 33 24 35 26 37 28 39 30 41 32 43 34 45 36 47 38 49 40 奇数线程Finish!42 44 46 48 偶数线程Finish!
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

题主可能理解上有一些问题,我们看到的只是输出结果而已,谈不上什么包含不包含的
简单分析下输出结果:
这里总共有三个线程,main,even,odd,三者之间的关系是异步的,你可以认为它们是同时运行的(是并发还是并行暂不考虑)。
在main线程中先后执行了even和odd的start方法,创建even与odd线程。
main线程执行打印avtiveCount。
even的run方法执行,打印到6的时候odd的run方法开始执行。
具体的输出结果是无法确定的,这个取决于jvm的调度。

查看完整回答
反对 回复 2019-04-24
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这两个线程看似是不相关的,其实它们都访问了同一个对象“System.out”,循环过程是对的,只不过由于都是在System.out中输出内容,导致输出结果混乱


查看完整回答
反对 回复 2019-04-24
  • 2 回答
  • 0 关注
  • 359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信