无锁

无锁,是无障碍的,保证有一个线程可以胜出。

无锁

  • CAS称为无锁栈、无锁队列,是一个原子性操作,CAS操作有3个基本属性:内存位置、期望原值、新值。CAS是一种实现乐观锁、无锁实现线程同步的方式。(先读后写、比较交换的原子操作)
  • AtomicInteger是用于实现整型数据CAS操作的封装类,里面提供了实现CAS操作各类接口,每个接口的实现都套用死循环,这种方式能够以较少的CPU指令完成CAS操作;
  • Unsafe:在一段内存中同时只有一个CPU方向,通过Unsafe能够获取内存的偏移量,偏移量反应了数据发生了修改,每次修改会保存上一个的副本,修改回来内存地址会偏移回来;
  • AtomicReference是用于实现引用类CAS操作的封装类,如String;
  • AtomicStampedReference:解决期望值出现由A变成B,再变回A的情况,AtomicStampedReference在AtomicReference基础上增加时间戳验证,修改值的情况时间戳+1,用于对时间、过程敏感的CAS操作,如冲Q币;
  • AtomicIntegerArray:用于实现数组的CAS操作的封装类;
  • AtomicIntegerFieldUpdater:借助反射机制,让普通变量也能使用原则操作,如User类;