下面是我的类:目的测试线程的启动后的结果!public class MyRunnable implements Runnable { int a = 0; public void run() {
for (a = 0; a < 10; a++) {
try {
Thread.sleep(10);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName() + " " + a);
}
} public static void main(String args[]) {
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
Thread t3 = new Thread(mr);
// Thread t4 = new Thread(mr);
t1.start();
t2.start();
t3.start();
// t4.start(); }
}下面的打印的结果:Thread-0 0
Thread-1 1
Thread-2 2
Thread-0 3
Thread-1 4
Thread-2 5
Thread-0 6
Thread-1 7
Thread-2 8
Thread-0 9
Thread-1 10
Thread-2 11
困惑之处: 我循环的是十次! 为什么线程会执行到 11 ?若把 t4 也启动 则会打印出:
Thread-0 0
Thread-1 1
Thread-2 2
Thread-3 3
Thread-0 4
Thread-1 5
Thread-2 6
Thread-3 7
Thread-0 8
Thread-1 9
Thread-2 10
Thread-3 11
Thread-0 12
很的困惑,为什么啊??希望高手指点!
for (a = 0; a < 10; a++) {
try {
Thread.sleep(10);
} catch (Exception e) {
}
System.out.println(Thread.currentThread().getName() + " " + a);
}
} public static void main(String args[]) {
Thread t1 = new Thread(mr);
Thread t2 = new Thread(mr);
Thread t3 = new Thread(mr);
// Thread t4 = new Thread(mr);
t1.start();
t2.start();
t3.start();
// t4.start(); }
}下面的打印的结果:Thread-0 0
Thread-1 1
Thread-2 2
Thread-0 3
Thread-1 4
Thread-2 5
Thread-0 6
Thread-1 7
Thread-2 8
Thread-0 9
Thread-1 10
Thread-2 11
困惑之处: 我循环的是十次! 为什么线程会执行到 11 ?若把 t4 也启动 则会打印出:
Thread-0 0
Thread-1 1
Thread-2 2
Thread-3 3
Thread-0 4
Thread-1 5
Thread-2 6
Thread-3 7
Thread-0 8
Thread-1 9
Thread-2 10
Thread-3 11
Thread-0 12
很的困惑,为什么啊??希望高手指点!
当 Thread-0 打印出 9后,做a++,此时a=10。这时Thread-1得到CPU(它刚才是用sleep()睡觉的),打印出a即:
Thread-1 10 ,然后做:a++,此时a=11。这时Thread-2得到CPU(它刚才是用sleep()睡觉的),打印出a即:
Thread-2 11 ,然后做:a++,此时a=12。CPU这时返回到Thread-0,以后大家都结束了(因为:a>=10了。)
原来 大家一觉醒来都不理 For 循环了!