小编Spe*_*ami的帖子

计数器变量有时打印小于 10 000 的数字

当我运行代码时,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)

我相信这个逻辑可以解释原因(虽然我不确定我是否正确)

  1. 操作系统调度程序决定 t1 执行 0.1 毫秒,在这段时间内,计数器 = 567 ,但是当 …

java multithreading synchronization

1
推荐指数
1
解决办法
165
查看次数

标签 统计

java ×1

multithreading ×1

synchronization ×1