public class Main {
static int i = 0;
public static void main(String[] args) {
for (; i < 2; i++)
new Thread(() -> System.out.println(i)).start();
}
}
我希望上面的代码可以打印出来
0
1
或者
1
0
但令我惊讶的是
2
2
我运行相同的程序,它也为我提供了相同的结果。但是如果你这样运行
for (; i < 2; i++) {
Thread.sleep(10);
new Thread(() -> System.out.println(i)).start();
}
结果变成
1
2
如果在Thread.sleep(10)
下面添加,new Thread(() -> System.out.println(i)).start();
则输出
0
1
这是因为当前线程(主线程)在线程之前执行循环。
线程1和线程2在代码的第二步和第七步之间开始。操作系统处理线程调度,因此您无法在该程序中得到预期的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句