关于线程安全

2021-02-20  本文已影响0人  浩仔_Boy

学习笔记,仅供自己参考,如有不对欢迎指正

1.关于内存模型

CPU高速缓存:因为CPU的执行速度要大于内存的读写速度,如果任何时候数据操作直接与内存交互,效率很低,所以出现了CPU高速缓存

CPU高速缓存的作用:程序执行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。

程序的原子性、可见性、有序性

禁止指令重排
Java语言提供了volatilesynchronized两个关键字来保证线程之间操作的有序性
volatile关键字本身就包含了禁止指令重排序的语义
synchronized则是由“一个变量在同一个时刻只允许一条线程对其进行lock操作”这条规则获得的,这个规则决定了持有同一个锁的两个同步块只能串行地进入。

参考:https://www.cnblogs.com/guanghe/p/9206635.html

2.关于线程安全

class VolatileSimpleUse {

    private volatile boolean isOpenedDoor;

    public void openDoor() {
        isOpenedDoor = true;
    }

    public void doWork() {
        while (!isOpenedDoor) {
            // 门关了,你可以睡觉
        }
    }
}

参考:https://www.cnblogs.com/krcys/p/9385360.html

上一篇 下一篇

猜你喜欢

热点阅读