System.out.println上下文切换

为什么打印语句,会导致上下文切换?

public void test() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (age == 0) {
//                    System.out.println(" "); //ctx change
                }
                System.out.println(age);
            }
        },"t1").start();
        
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            System.out.println(e);        
        }
        age = 1;
}
阅读 1.8k
1 个回答

多线程的内存可见性和上下文有什么关系??

原因是:
println方法里面是加了同步锁的,每次会清空工作内存,再次从主内存读取值,所以可以读取最新的age值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题