Java并发编程包中atomic的实现原理示例详解
在以上代码中,使用AtomicInteger声明了一个全局变量,并且在多线程中进行自增,代码中并没有进行显示的加锁。如果将AtomicInteger换成Integer,打印结果基本都是小于100。UnSafe提供了java可以直接操作底层的能力。CAS相对于其他锁,不会进行内核态操作,有着一些性能的提升。在Java 8中引入了4个新的计数器类型,LongAdder、LongAccumulator、DoubleAdder、DoubleAccumulator。他们都是继承于Striped64。Atomic*遇到的问题是,只能运用于低并发场景。可以看到大概实现原理是:通过CAS乐观锁保证原子性,通过自旋保证当次修改的最终修改成功,通过降低锁粒度(多段锁)增加并发性能。