原子操作
文章平均质量分 72
罗隽_jerChuan
自己还有很多不足,希望能够成为大牛
展开
-
深入理解CAS
什么是CAS CompareAndSet 比较交换 :比较当前内存和主内存中的值,如果达到预期,就进行交换,如果没有达到,就一直循环。 缺点:1.由于底层是自旋锁,循环较为耗时 2.一次只能保证一个共享变量的原子性 3.存在ABA问题 在Java的原子类中存在CAS方法,其方法底层则是调用Unsafe类中的CAS方法。 什么是Unsafe类:它是Java用来修改内存中变量的一个后门类,其底层都是C++对于内存变量的直接修改方法。 以AtomicInteger的加法为例,可以看到它的底层就.原创 2021-02-27 22:32:49 · 200 阅读 · 0 评论 -
了解volatile
当我们聊到volatile的时候,只需要围绕它的三个特性来了解即可 1.保证可见性 2.不保证原子性 3.禁止指令重排 那么我们则需要细化这三个特性的内容 1.volatile是如何保证可见性的呢? 在java中还有一个约定的概念JMM(java内存模型)我们在建立线程的同时,线程将会分为主内存+工作内存 而我们在进行一些共享内存变量(比如静态变量)的一些操作的时候 JMM则有一些同步约定:1.线程解锁前,共享变量必须刷新到主内存中 2.线程加锁前,必须将主内存的共享变量读取到工作内存中 3.原创 2021-02-27 13:42:17 · 180 阅读 · 0 评论 -
Java单例的由浅入深----懒汉式的升级(2 原子操作、指令重排)懒汉式的最终版本(volatile)
知识点:什么是原子操作简单的来说,原子操作(atomic)就是不可分割的操作,在计算机中,就是指不会因为线程调度被打断的操作。 比如,简单的赋值就是一个原子操作m=6;例如m原先的值为0,那么对于这个操作,要么执行成功变成了6,要么执行失败变成了0,而不会出现诸如m=3这种中间状态–即使是在并发的线程中。 然而声明赋值就不是一个原子操作:int m = 6;对于这个语句,至少有两个操作: 1、原创 2017-09-25 16:29:42 · 618 阅读 · 0 评论