在机器学习应用中需要吸取的经验和教训
. volatile相关经典面试题
8.1 谈谈volatile的特性 内存屏障保证前面的指令先执行,所以这就保证了禁止了指令重排啦,同时内存屏障保证缓存写入内存和其他处理器缓存失效,这也就保证了可见性,哈哈~ 7.volatile的典型场景 通常来说,使用volatile必须具备以下2个条件:
实际上,volatile场景一般就是「状态标志」,以及「DCL单例模式」。 7.1 状态标志
深入理解Java虚拟机,书中的例子: ock指令相当于一个「内存屏障」,它保证以下这几点:
显然,第2、3点不就是volatile保证可见性的体现嘛,第1点就是禁止指令重排列的体现。 内存屏障内存屏障四大分类:(Load 代表读取指令,Store代表写入指令)
内存屏障 显然,这里还不是底层,实际上volatile保证可见性和禁止指令重排都跟「内存屏障」有关,我们编译volatile相关代码看看~ DCL单例模式(volatile)&编译对比
DCL单例模式(Double Check Lock,双重检查锁)比较常用,它是需要volatile修饰的,所以就拿这段代码编译吧
6.volatile底层原理 以上讨论学习,我们知道volatile的语义就是保证变量对所有线程可见性以及禁止指令重排优化。那么,它的底层是如何保证可见性和禁止指令重排的呢? 图解volatile是如何保证可见性的? 在这里,先看几个图吧,哈哈~
假设flag变量的初始值false,现在有两条线程t1和t2要访问它,就可以简化为以下图: (编辑:吉安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |