java内存模型

可见性问题:


public class VisibilityDemo {

    private boolean flag = true;

    public static void main(String[] args) throws InterruptedException {
        VisibilityDemo demo1 = new VisibilityDemo();
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 0;
                while (demo1.flag){
                    I++;
                }

                System.out.println("i="+i);

            }
        });

        thread1.start();

        TimeUnit.SECONDS.sleep(2);
        demo1.flag = false;
        System.out.println("被设置为false");
    }
}

问题:指令重排


屏幕快照 2019-09-10 下午11.53.18.png

屏幕快照 2019-09-10 下午11.53.54.png

jvm文档:
https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

屏幕快照 2019-09-11 下午11.28.38.png

cpu缓存可能导致的不一致可以通过volatile解决

屏幕快照 2019-09-14 上午12.21.30.png

屏幕快照 2019-09-14 上午12.28.20.png

屏幕快照 2019-09-14 上午12.40.35.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容