JUC:CAS原理

在多核状态下:某个线程执行到带lock的指令的时候,cpu会让总线锁住,知道把这个指令执行完毕,然后在开启总线,以保证多个线程的原子性;

CAS和volatile的相关工具类【JUC】:

  • 原子整数:

    • AtomicBoolean

    • AtomicInteger

    • AtomicLong

    • 底层都是CAS:compareAndSet();

      while(true){
          int pre = i.get();
          int next = pre - 10; // 操作
          if(i.compareAndSet(pre, next)){
              break;
          }
      }
      
  • 原子引用类型:

    • AtomicReference:只能判断是否改变,不能判断是否发生循环变换;
    • AtomicMarkableReference:在AtomicReference基础上,增加一个版本号,修改过就加1;
    • AtomicStampedReference:有时候只关心,是否修改,所以版本号使用一个boolean值;
  • 原子数组:

    • AtomicIntegerArray
    • AtomicLongArray
    • AtomicReferenceArray
  • 字段更新器:针对对象成员进行原子操作,只能配合volatile操作;

    • AtomicReferenceFieldUpdater
    • AtomicIntegerFieldUpdater
    • AtomicLongFieldUpdate;
  • 原子累加器:

    • ···
  • Unsafe:提供了底层操作内存和线程的方法,只能通过反射获取;

posted @ 2025-03-24 17:56  烟雨断桥  阅读(22)  评论(0)    收藏  举报