使用AtomicStampedReference<T>的大坑

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

使用AtomicStampedReference<T>的大坑

不吃披萨边   2020-03-14 我要评论

//在初始化的时候会把引用和时间戳存到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 }

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们