首页 > 其他 > 详细

使用AtomicStampedReference<T>的大坑

时间:2020-03-14 17:39:15      阅读:79      评论:0      收藏:0      [点我收藏+]

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

 

使用AtomicStampedReference<T>的大坑

原文:https://www.cnblogs.com/jianghengsh/p/12493081.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!