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

查看:73
本文介绍了java - 两个无关线程的运行结果互相包含对方内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

两个无关线程的运行结果互相包含对方内容是怎么回事?代码如下:
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 =main
activityCount=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!

解决方案

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

这篇关于java - 两个无关线程的运行结果互相包含对方内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆