当我运行代码时,System.out.println(counter);有时会打印小于 10 000 的数字。在运行代码之前,我认为计数器应该在 [10 000, 20 000] 之间,具体取决于操作系统调度程序是否决定在单独的核心上或在同一核心上通过在它们之间切换或两者的组合来执行主线程和 t1 。
public class App {
private static int counter = 0;
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 10_000; i++) {
counter++;
}
}
});
t1.start();
for(int i = 0; i < 10_000; i++) {
counter++;
}
System.out.println(counter); // *****
}
}
Run Code Online (Sandbox Code Playgroud)
我相信这个逻辑可以解释原因(虽然我不确定我是否正确)