java并发编程:线程安全管理类--原子操作类--AtomicStampedReference<V>
1.类 AtomicStampedReference<V>
AtomicStampedReference 维护带有整数“标志”的对象引用,可以用原子方式对其进行更新。
实现注意事项。通过创建表示“已装箱”的 [reference, integer] 对的内部对象,此实现维持带标志的引用。
2.构造函数
AtomicStampedReference
public AtomicStampedReference(V initialRef,
int initialStamp)
- 创建具有给定初始值的新
AtomicStampedReference。- 参数:
initialRef- 初始引用initialStamp- 初始标志
3.方法详解
getReference
public V getReference()
- 返回该引用的当前值。
-
- 返回:
- 该引用的当前值
getStamp
public int getStamp()
- 返回该标志的当前值。
-
- 返回:
- 该标志的当前值
get
public V get(int[] stampHolder)
- 返回该引用和该标志的当前值。典型的用法为
int[1] holder; ref = v.get(holder);。 -
- 参数:
stampHolder- 大小至少为 1 的数组。返回时,stampholder[0]将保存该标志的值。- 返回:
- 该引用的当前值
weakCompareAndSet
public boolean weakCompareAndSet(V expectedReference,
V newReference,
int expectedStamp,
int newStamp)
- 如果当前引用
==预期引用,并且当前标志等于预期标志,则以原子方式将该引用和该标志的值设置为给定的更新值。可能意外失败并且不提供排序保证,所以只有在很少的情况下才对
compareAndSet进行适当的选择。 -
- 参数:
expectedReference- 该引用的预期值newReference- 该引用的新值expectedStamp- 该标志的预期值newStamp- 该标志的新值- 返回:
- 如果成功,则返回 true
compareAndSet
public boolean compareAndSet(V expectedReference,
V newReference,
int expectedStamp,
int newStamp)
- 如果当前引用
==预期引用,并且当前标志等于预期标志,则以原子方式将该引用和该标志的值设置为给定的更新值。 -
- 参数:
expectedReference- 该引用的预期值newReference- 该引用的新值expectedStamp- 该标志的预期值newStamp- 该标志的新值- 返回:
- 如果成功,则返回 true
set
public void set(V newReference,
int newStamp)
- 无条件地同时设置该引用和标志的值。
-
- 参数:
newReference- 该引用的新值newStamp- 该标志的新值
attemptStamp
public boolean attemptStamp(V expectedReference,
int newStamp)
- 如果当前引用
==预期引用,则以原子方式将该标志的值设置为给定的更新值。此操作的任何给定调用都可能会意外失败(返回false),但是在当前值保持预期值而且没有其他线程也在尝试设置该值时,重复调用将最终获得成功。 -
- 参数:
expectedReference- 该引用的预期值newStamp- 该标志的新值- 返回:
- 如果成功,则返回 true
java并发编程:线程安全管理类--原子操作类--AtomicStampedReference<V>的更多相关文章
- java并发编程 线程基础
java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...
- Java 并发编程 | 线程池详解
原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...
- Java并发编程:线程间通信wait、notify
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- Java并发编程:线程和进程的创建(转)
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- java并发编程 | 线程详解
个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...
- java并发编程系列二:原子操作/CAS
什么是原子操作 不可被中断的一个或者一系列操作 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 CAS( Compare And Swap ) 为什么要有CAS? Compar ...
- Java并发编程——线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- Java并发编程——线程池
本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...
- Java并发编程(三)Thread类的使用
一.线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wait ...
- [转]JAVA并发编程学习笔记之Unsafe类
1.通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语 ...
随机推荐
- 基础知识 - Golang 中的格式化输入输出
------------------------------------------------------------ [格式化输出] // 格式化输出:将 arg 列表中的 arg 转换为字符串输 ...
- csharp编写界面,opencv编写类库,解决 Pinvoke过程中的参数传递和平台调用问题
使用csharp 编写winform程序,不仅速度快,而且容易界面美化并找到其他类库的支持:而使用 opencv编写图形图像处理程序,是目前比较流行,而且高效的一种方法.如果需要将两者结合,需 ...
- 20145105 《Java程序设计》实验三总结
实验三 一. 实验内容 结对修改实验一代码,重点学习重构 二. 实验步骤 下载结伴同学的实验一代码 初始代码 进行整数.小数和负数的多组数据测试,发现一个运行错误的例子 分析后 ...
- 20145118《Java程序设计》 第8周学习总结
20145118<Java程序设计> 第8周学习总结 教材学习内容总结 1.Java SE提供了日志API,可以基于标准调用,用于记录.java.util.logging包提供了日志功能相 ...
- 20145317 网络对抗技术 逆向与Bof基础
20145317 网络对抗技术 逆向与Bof基础 实践要求 1. 掌握NOP,JNE,JE,JMP,CMP汇编指令的机器码 2. 掌握反汇编与十六进制编程器 3. 能正确修改机器指令改变程序执行流程 ...
- linux内核分析 第六周
一.进程的描述 为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. 1.进程控制块PCB--task_struct 进程状态 进程打开的文件 进程优先级信息 2. ...
- [矩阵十题第七题]vijos 1067 Warcraft III 守望者的烦恼 -矩阵快速幂
背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看 ...
- BZOJ 2434 阿狸的打字机(fail树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2434 题意:阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28 ...
- luoguP2572 [SCOI2010]序列操作
题目&&链接 反正数据都是一样的,luogu比较友好 luogu bzoj lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变 ...
- 导出数据库表为world文档说明,以及PowerDesigner导出表结构pdm设计文档
如何使用“mysql导出数据库结构为world工具”以及如何使用powerdesigner映射数据库模型 一.通过powerdesigner配置ojdbc 1.安装并打开powerdesigner,新 ...