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开始的吗?
求前辈指点一二 展开
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开始的吗?
求前辈指点一二 展开
1个回答
展开全部
这块你需要理解count--其实是一个简化写法,编译后的可以实用javap查看编译后的class文件生成的类似于汇编的代码,你就会发现。
count--其实就是count = count -1,当第一调线程过来count-1,count变为4,第一条线程的打印语句还未来得及执行,这时候第二条线程也完成了count-1的操作,count变为了3,第一条线程执行打印,count就是3了。你不要这样研究多线,什么意义都没有。至于第二点,看下Thread的源码就好了
count--其实就是count = count -1,当第一调线程过来count-1,count变为4,第一条线程的打印语句还未来得及执行,这时候第二条线程也完成了count-1的操作,count变为了3,第一条线程执行打印,count就是3了。你不要这样研究多线,什么意义都没有。至于第二点,看下Thread的源码就好了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询