什么是CAS?
CompareAndSwapInt
CAS乐观锁:
多个线程使用CAS同时更新同一个变量时,只有一个线程更新变量的值其他线程被告知失败,可以再次尝试
CAS有可能带来ABA问题(1->8->1)
如果在乎:
AtomicStampedReference
每次改变都需要版本号
AtomicMarkableReference
不在乎改了多少次,只在乎改没改
如果在写回去的时候被打断了,怎么办?
写回去的时候必须保障原子性(硬件底层保证原子性)
并发编程3大特性 可见性 原子性 有序性
文章作者: 樱桃先生
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 樱桃先生!
相关推荐

2020-09-13
新的日期和时间类
新的日期和时间类 LocalDate LocalTime LocalDateTime 都是不可变的对象 三者使用方式一样 12获取实例 用静态方法LocalDateTime.now() Instant 时间戳 默认获取UTC 时区 1Instant.now.atOffset(ZoneOffset.ofHours(8)) Duration 计算两个时间之间的间隔 Period 计算两个日期之间的间隔 12345Duration.between(ins1,ins2)Duration.between(lt1,lt2)Period.between(ins1,ins2)Period.between(lt1,lt2) TeporalAdjuster 时间校正器 接口 12345ldt.withDayOfMonth(10) 指定月份//自定义ldt.with(()->{ }) DateTimeFormatter 格式化 123456DateTimeFormatter dtf = DateTimeFormatter ISO_DATE_TIM...

2021-03-03
Java基础小练习_分组
Java小练习-英语学习小组分组事情起因 要在于Marin 让我把每天英语分组的名单 在早晨发到群里 然后 程序员的事情让程序解决吧 一动手就发现自己忘了好多东西 一开始还是想到不重复的集合 什么HashSet然后再remove出来 想了好久写了好久 又想用当天日期做个随机数 百度了一下 还学到一个新方法 最终代码如下 肯定不是最优解 1234567891011121314public class RandomGroup { public static void main(String[] args) { String[] s1 = {"Marin", "Jade", "Rorschach", "Kinson", "Eric", "GlenZ", "GlenY", "Billy", "Mark", "Kyrie", ...

2021-03-06
反编译案例集
反编译11234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586public class Test1 { public static void main(String[] args) { int i=2; int j=3; int k=i+j; }}//javap -vLast modified 2021年3月6日; size 476 bytes SHA-256 checksum 8e654caa67ddc0bcfb09a7b96a365eab397bb819078361cb1b83261628e1c49f Compiled from "Test1.java"public class com.atg...

2021-03-13
Synchronized的实现原理和应用
Synchronized的实现原理和应用很多人称呼它为重量级锁.但是随着Java SE1.6对Synchronized进行优化后,有些情况下就没有那么重了. Java的每一对象都可以作为锁具体的实现方式: 对于普通的同步方法,锁是当前的实例对象 对于静态同步方法,锁是当前类的Class对象 对于同步方法块,锁是Synchronized括号里配置的对象 Java对象头Synchronized的用的锁是存在Java对象头里面的.如果对象是数组类型,则虚拟机用三个字宽(Word)存储对象头. 如果是非数组,则是2字宽存储对象头 在32位虚拟机中,1字宽等于4字节,即32bit,如下图 Java 对象头的长度 长度 内容 说明 32/64bit Mark Word 存储对象的hashCode或锁信息 32/64bit Class Metadata Address 存储到对象类型数据的指针 32/32bit Array length 数组的长度(如果当前对象是数组) Java对象头里的Mark Word里默认存储对象的Hash Co...

2021-03-17
原子操作的实现原理
原子操作的实现原理原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或者一系列操作” 术语定义缓存行(Cache line);缓存的最小操作单位 比较并交换(Compare and swap)CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有变化,如果没有发生变化,才交换成新值,发生了变化则不交换 CPU流水线(CPU pipeline)CPU流水线的工作方式就像工业生产上的装配流水线,在CPU中由56个不同功能的电路单元组成一条指令处理流水线,然后将一条x86指令分成56步再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度 内存顺序冲突(Memory order violation)内存顺序冲突一般是由假共享引起的,假共享是指多个CPU同时修改同一个缓存行的不同部分而引起其中一个CPU的操作无效,当出现这个内存顺序冲突时,CPU必须清空流水线 处理器如何实现原子操作使用总线锁保证原子性所谓总线锁就是使用处理器提供的一...
公告
欢迎光临樱桃先生的博客🍒~


