java并发编程:线程安全管理类--原子操作类--AtomicMarkableReference<V>
1.类 AtomicMarkableReference<V>
public class AtomicMarkableReference<V>extends Object
AtomicMarkableReference
维护带有标记位的对象引用,可以原子方式对其进行更新。
实现注意事项。通过创建表示“已装箱”的 [reference, boolean] 对的内部对象,此实现维持可标记的引用。
2.构造函数详解
AtomicMarkableReference
- public AtomicMarkableReference(V initialRef,
- boolean initialMark)
- 创建具有给定初始值的新
AtomicMarkableReference
。- 参数:
initialRef
- 初始引用initialMark
- 初始标记
3.方法详解
getReference
- public V getReference()
- 返回该引用的当前值。
-
- 返回:
- 该引用的当前值
isMarked
- public boolean isMarked()
- 返回该标记的当前值。
-
- 返回:
- 该标记的当前值
get
- public V get(boolean[] markHolder)
- 返回该引用和该标记的当前值。典型的用法为
boolean[1] holder; ref = v.get(holder);
。 -
- 参数:
markHolder
- 大小至少为 1 的数组。返回时,markholder[0]
将保存该标记的值。- 返回:
- 该引用的当前值
weakCompareAndSet
- 如果当前引用
==
预期引用,并且当前标记等于预期标记,那么以原子方式将引用和标记的值设置为给定的更新值。可能意外失败并且不提供排序保证,所以只有在很少的情况下才对
compareAndSet
进行适当地选择。 -
- 参数:
expectedReference
- 该引用的预期值newReference
- 该引用的新值expectedMark
- 该标记的预期值newMark
- 该标记的新值- 返回:
- 如果成功,则返回 true
compareAndSet
- 如果当前引用
==
预期引用,并且当前标记等于预期标记,那么以原子方式将引用和标记的值设置为给定的更新值。 -
- 参数:
expectedReference
- 该引用的预期值newReference
- 该引用的新值expectedMark
- 该标记的预期值newMark
- 该标记的新值- 返回:
- 如果成功,则返回 true
set
- public void set(V newReference,
- boolean newMark)
- 无条件地同时设置该引用和标记的值。
-
- 参数:
newReference
- 该引用的新值newMark
- 该标记的新值
attemptMark
- public boolean attemptMark(V expectedReference,
- boolean newMark)
- 如果当前引用
==
预期引用,则以原子方式将该标记的值设置为给定的更新值。此操作的任何给定调用都可能会意外失败(返回false
),但是在当前值保持预期值而且没有其他线程也在尝试设置该值时,重复调用将最终获得成功。 -
- 参数:
expectedReference
- 该引用的预期值newMark
- 该标记的新值- 返回:
- 如果成功,则返回 true
java并发编程:线程安全管理类--原子操作类--AtomicMarkableReference<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语 ...
随机推荐
- leetcode 136 Single Number, 260 Single Number III
leetcode 136. Single Number Given an array of integers, every element appears twice except for one. ...
- 20145317《网络对抗》shellcode注入&Return-to-libc攻击深入
20145317<网络对抗>shellcode注入&Return-to-libc攻击深入 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻 ...
- compile vi from source code
1.install ncurses library (vi depend on ncurses library) ./configure --prefix=/usr --with-termlib m ...
- Wireshark过滤总结
Wireshark提供了两种过滤器:捕获过滤器:在抓包之前就设定好过滤条件,然后只抓取符合条件的数据包.显示过滤器:在已捕获的数据包集合中设置过滤条件,隐藏不想显示的数据包,只显示符合条件的数据包.需 ...
- 【Maven安装】centos安装maven
实践证明,大多数的源码都需要maven的支持编译,所以maven和jdk环境都是必须的 一.官网下载 apache-maven-3.3.9-bin.tar.gz 注意:需要jdk1.7及以上 二.上传 ...
- BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法
Description 给定两个项链的表示,判断他们是否可能是一条项链. Input 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). Output 如果 ...
- java进制转换代码
定义十进制的数直接写,定义8进制的数以0开头,定义二进制的数以0b开头,定义十六进制的数以0x开头需要将十进制的数以二进制的数表示出来可以参照下例: int a = 10; System.out.pr ...
- UVa 1343 旋转游戏(dfs+IDA*)
https://vjudge.net/problem/UVA-1343 题意:如图所示,一共有8个1,8个2和8个3,如何以最少的移动来使得中间8个格子都为同一个数. 思路:状态空间搜索问题. 用ID ...
- mysql 存储过程简单实例
一.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...
- Croc Champ 2013 - Round 1 E. Copying Data 分块
E. Copying Data time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...