zoukankan      html  css  js  c++  java
  • 使用AtomicStampedReference<T>的大坑

    //在初始化的时候会把引用和时间戳存到pair中

    AtomicStampedReference<Integer> integerAtomicStampedReference = new AtomicStampedReference<Integer>(2020,1);

     

    然后执行

    System.out.println(integerAtomicStampedReference.compareAndSet(2020,2021,integerAtomicStampedReference.getStamp(),integerAtomicStampedReference.getStamp()+1));

     

    //此时的2020和Pair中的2021不是同一个对象了

    //这里注意Integer是一个类 在-127——+128有缓存

    //大于128没有缓存,所以

     

    //compareAndSet中expectedReference和current的地址就不同了我草,结果执行下边就返回false了

     1 public boolean compareAndSet(V   expectedReference,
     2 
     3                              V   newReference,
     4 
     5                              int expectedStamp,
     6 
     7                              int newStamp) {
     8 
     9     Pair<V> current = pair;
    10 
    11     return
    12 
    13         expectedReference == current.reference &&//这一行就是false
    14 
    15         expectedStamp == current.stamp &&
    16 
    17         ((newReference == current.reference &&
    18 
    19           newStamp == current.stamp) ||
    20 
    21          casPair(current, Pair.of(newReference, newStamp)));
    22 
    23 }
  • 相关阅读:
    PHP类(一)-类的实例化
    PHP函数(六)-匿名函数(闭包函数)
    PHP函数(五)-回调函数
    javaIO-字符流
    split 命令
    hadoop的增删改查
    Hadoop的MR
    java的序列化和反序列化
    字符串格式化-String类format方法
    Avro从入门到入土
  • 原文地址:https://www.cnblogs.com/jianghengsh/p/12493081.html
Copyright © 2011-2022 走看看