chapter15_原子变量与非阻塞同步机制_4_非阻塞算法
2019-03-20 19:54
447 查看
-
原子变量的compareAndSet操作__既能提供原子性, 又能提供可见性__
public class AtomicInteger extends Number implements java.io.Serializable { ... private static final jdk.internal.misc.Unsafe U = jdk.internal.misc.Unsafe.getUnsafe(); ... public final int incrementAndGet() { return U.getAndAddInt(this, VALUE, 1) + 1; } ... } public final class Unsafe { ... @HotSpotIntrinsicCandidate public final int getAndAddInt(Object o, long offset, int delta) { int v; do { v = getIntVolatile(o, offset); } while (!weakCompareAndSetInt(o, offset, v, v + delta)); return v; } ... }
-
非阻塞计数器
@ThreadSafe public class CasCounter { private SimulatedCAS value; public int getValue() { return value.get(); } public int increment() { int v; do { v = value.get(); } while (v != value.compareAndSwap(v, v + 1)); return v + 1; } }
-
非阻塞的栈
@ThreadSafe public class ConcurrentStack<E> { private AtomicReference<Node<E>> top = new AtomicReference<Node<E>>(); public void push(E item) { Node<E> newHead = new Node<>(item); Node<E> oldHead; do { oldHead = top.get(); newHead.next = oldHead; } while (!top.compareAndSet(oldHead, newHead)); } public E pop() { Node<E> oldHead; Node<E> newHead; do { oldHead = top.get(); if (oldHead == null) { return null; } newHead = oldHead.next; } while (!top.compareAndSet(oldHead, newHead)); return oldHead.item; } private static class Node<E> { public final E item; public Node<E> next; public Node(E item) { this.item = item; } } }
-
CAS的基本使用模式是
在更新某个值时存在不确定性, 在更新失败时重新尝试
相关文章推荐
- 第15章 原子变量与非阻塞同步机制
- 《Java并发编程实战》第十五章 原子变量与非阻塞同步机制 读书笔记
- 原子变量与非阻塞同步机制(第十五章)
- Java并发读书学习笔记(十一)——原子变量与非阻塞同步机制
- 《Java并发编程实战》---性能与可伸缩性---原子变量与非阻塞同步机制
- 并发编程11.原子变量与非阻塞同步机制
- JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
- 《java并发编程实战》 第十五章 原子变量与非阻塞同步机制
- 《JAVA并发编程实战》 - 原子变量与非阻塞同步机制
- 读书笔记:Java并发实战第15章 原子变量与非阻塞同步机制
- 并发编程实战学习笔记(十一)-原子变量与非阻塞同步机制
- [Java Concurrency in Practice]第十五章 原子变量与非阻塞同步机制
- java并发编程实践学习(15)原子变量与非阻塞同步机制
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法
- java学习笔记15:垃圾回收机制(Garbage Collection)、垃圾回收原理和算法、通用的分代垃圾回收机制、JVM调优和Full GC、开发中容易造成内存泄露的操作
- 非阻塞同步算法与CAS(Compare and Swap)无锁算法