Java:开了两个小线程,为什么结果是这样的呢?

classMyRunnableextendsThread{privateintcount=5;publicvoidrun(){for(inti=0;i<5;i++){co... class MyRunnable extends Thread {
private
int count = 5;
public void run() {
for (int i = 0; i < 5;
i++) {
count--;
System.out.println(Thread.currentThread().getName() + ":" + count);
}
}
}

public class Client {

public static void main(String[] args)
{
Runnable r= new MyRunnable();
Thread one = new Thread(r);
Thread two = new Thread(r);
one.start();
two.start();
}

}
输出结果为(!有时候!):
Thread-1:3

Thread-1:2

Thread-1:1

Thread-1:0

Thread-1:-1

Thread-2:3

Thread-2:-2

Thread-2:-3

Thread-2:-4

Thread-2:-5

1、为什么初始输出的是3而是4呢,这两个线程是怎么运行的一下子能跑出个3?
2、为什么线程名是Thread-1、Thread-2,默认创建的线程不是从Thread-0开始的吗?

求前辈指点一二
展开
 我来答
佳佳西西
2015-11-10 · 超过14用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:19.3万
展开全部
这块你需要理解count--其实是一个简化写法,编译后的可以实用javap查看编译后的class文件生成的类似于汇编的代码,你就会发现。

count--其实就是count = count -1,当第一调线程过来count-1,count变为4,第一条线程的打印语句还未来得及执行,这时候第二条线程也完成了count-1的操作,count变为了3,第一条线程执行打印,count就是3了。你不要这样研究多线,什么意义都没有。至于第二点,看下Thread的源码就好了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式