int[] array = { 0 };
for (; array[0] < 10; array[0]++) {
// int i = array[0];
new Thread(() -> {
/*
* 问题:array[0] = 10能进入到该循环(随机现象?)
* 原因:主线程的for循环执行++操作速度更快,
* 主线程的array[0]=10的时候,new的第10个线程在array[0]=9之后开始存在,
* 只是还未来得及执行打印操作就被剥夺了执行权/一直是等待调度中
* 解决方法:不在循环中直接使用它的计数器,而是用额外定义
* 的一个和它相等的变量来取代,该数值不可能为10,具体参考注释
*/
System.out.println(array[0]);
// System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}).start();
}
结语:感谢您的阅读!如有错误之处,烦请指出,再次感谢,祝工作顺心,生活愉快~