常常复习 【数据结构】B-Tree, B+Tree, B*树介绍 转

1. Java NIO浅析:https://zhuanlan.zhihu.com/p/23488863html

2. dubbo:http://dubbo.apache.org/en-us/index.htmlapache

3. 【数据结构】B-Tree, B+Tree, B*树介绍 转数据结构

4. Java CAS 原理剖析:http://www.javashuo.com/article/p-fxklxldt-cv.htmlpost

     a. compareAndSwapInt(var1, var2, var5, var5 + var4)其实换成compareAndSwapInt(obj, offset, expect, update)比较清楚,意思就是若是obj内的valueexpect相等,atom

         就证实没有其余线程改变过这个变量,那么就更新它为update,若是这一步的CAS没有成功,那就采用自旋的方式继续进行CAS操做,取出乍一看这也是两个步骤了啊,其实在JNI里是借助于一个CPU指令完成的。因此仍是原子操做。url

     b. CAS 的问题: spa

          b1. ABA问题: CAS须要在操做值的时候检查下值有没有发生变化,若是没有发生变化则更新,可是若是一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,可是实际上却变化了。这就是CAS的ABA问题。 常见的解决思路是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A 就会变成1A-2B-3A。 目前在JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法做用是首先检查当前引用是否等于预期引用,而且当前标志是否等于预期标志,若是所有相等,则以原子方式将该引用和该标志的值设置为给定的更新值。线程

          b2. 循环时间长开销大 :上面咱们说过若是CAS不成功,则会原地自旋,若是长时间自旋会给CPU带来很是大的执行开销。code

相关文章
相关标签/搜索