java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdater<T>
1.类 AtomicLongFieldUpdater<T>
public abstract class AtomicLongFieldUpdater<T> extends Object
基于反射的实用工具,可以对指定类的指定 volatile long
字段进行原子更新。此类用于原子数据结构,该结构中同一节点的几个字段都独立受原子更新控制。
注意,此类中 compareAndSet
方法的保证弱于其他原子类中该方法的保证。因为此类不能确保所有使用的字段都适合于原子访问目的,所以对于 compareAndSet 和 set 的其他调用,它仅可以保证原子性和可变语义。
2.构造函数详解
AtomicLongFieldUpdater
protected AtomicLongFieldUpdater()
受保护的无操作构造方法,供子类使用。
3.方法详解
newUpdater
public static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass,
String fieldName)
- 为对象创建并返回一个具有给定字段的更新器。需要 Class 参数检查反射类型和一般类型是否匹配。
-
- 参数:
tclass
- 保持字段的对象类fieldName
- 要更新的字段名称- 返回:
- 更新器
- 抛出:
IllegalArgumentException
- 如果该字段不是可变的 long 类型RuntimeException
- 如果该类不保持字段,或者是错误的类型,将抛出 RuntimeException 和一个嵌套的基于反射的异常。
compareAndSet
public abstract boolean compareAndSet(T obj,
long expect,
long update)
- 如果当前值
==
预期值,则以原子方式将此更新器所管理的给定对象的字段设置为给定的更新值。对compareAndSet
和set
的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。 -
- 参数:
obj
- 有条件地设置其字段的对象expect
- 预期值update
- 新值- 返回:
- 如果成功,则返回 true。
- 抛出:
ClassCastException
- 如果obj
不是类的实例(该类处理在构造方法中建立的字段)。
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj,
long expect,
long update)
- 如果当前值
==
预期值,则以原子方式将此更新器所管理的给定对象的字段设置为给定的更新值。对compareAndSet
和set
的其他调用,此方法可以确保原子性,但对于字段中的其他更改则不一定确保原子性。可能意外失败并且不提供排序保证,所以只有在很少的情况下才对
compareAndSet
进行适当地选择。 -
- 参数:
obj
- 有条件地设置其字段的对象expect
- 预期值update
- 新值- 返回:
- 如果成功,则返回 true。
- 抛出:
ClassCastException
- 如果obj
不是类的实例(该类处理在构造方法中建立的字段)。
set
public abstract void set(T obj,
long newValue)
- 将此更新器管理的给定对象的字段设置为给定更新值。对于
compareAndSet
的后续调用,此操作可以确保充当可变存储。 -
- 参数:
obj
- 要设置其字段的对象newValue
- 新值
lazySet
public abstract void lazySet(T obj,
long newValue)
- 最后将此更新器管理的给定对象的字段设置为给定更新值。
-
- 参数:
obj
- 要设置其字段的对象newValue
- 新值- 从以下版本开始:
- 1.6
get
public abstract long get(T obj)
- 获取此更新器管理的在给定对象的字段中保持的当前值。
-
- 参数:
obj
- 要获取其字段的对象- 返回:
- 当前值
getAndSet
public long getAndSet(T obj,
long newValue)
- 将此更新器管理的给定对象的字段以原子方式设置为给定值,并返回旧值。
-
- 参数:
obj
- 要获取并设置其字段的对象newValue
- 新值- 返回:
- 以前的值
getAndIncrement
public long getAndIncrement(T obj)
- 以原子方式将此更新器管理的给定对象字段的当前值加 1。
-
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 以前的值
getAndDecrement
public long getAndDecrement(T obj)
- 以原子方式将此更新器管理的给定对象字段当前值减 1。
-
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 以前的值
getAndAdd
public long getAndAdd(T obj,
long delta)
- 以原子方式将给定值添加到此更新器管理的给定对象的字段的当前值。
-
- 参数:
obj
- 要获取并设置其字段的对象delta
- 要添加的值- 返回:
- 以前的值
incrementAndGet
public long incrementAndGet(T obj)
- 以原子方式将此更新器管理的给定对象字段当前值加 1。
-
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 更新的值
decrementAndGet
public long decrementAndGet(T obj)
- 以原子方式将此更新器管理的给定对象字段当前值减 1。
-
- 参数:
obj
- 要获取并设置其字段的对象- 返回:
- 更新的值
addAndGet
public long addAndGet(T obj,
long delta)
- 以原子方式将给定值添加到此更新器管理的给定对象的字段的当前值。
-
- 参数:
obj
- 要获取并设置其字段的对象delta
- 要添加的值- 返回:
- 更新的值
java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdater<T>的更多相关文章
- 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语 ...
随机推荐
- 第八篇:支持向量机 (SVM)分类器原理分析与基本应用
前言 支持向量机,也即SVM,号称分类算法,甚至机器学习界老大哥.其理论优美,发展相对完善,是非常受到推崇的算法. 本文将讲解的SVM基于一种最流行的实现 - 序列最小优化,也即SMO. 另外还将讲解 ...
- 20145220韩旭飞《网络对抗》实验九:web安全基础实践
基础问答 (1)SQL注入攻击原理,如何防御 原理:把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串. 防御: 利用输入规则限制进行防御,不允许特殊字符输入 (2)XSS攻击的原理,如 ...
- Matchvs 使用记录
Matchvs Matchvs视频教程. https://doc.matchvs.com/VideoTutorials/videogs matchvs下载资源. http://www.matchvs. ...
- WideCharToMultiByte和MultiByteToWideChar函数的用法(转载)
出处:http://www.cnblogs.com/gakusei/articles/1585211.html 为了支持Unicode编码,需要多字节与宽字节之间的相互转换.这两个系统函数在使用时需要 ...
- Python3基础 if else 格式 输入一个整数并判断是8吗
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- P2894 [USACO08FEB]酒店Hotel 线段树
题目大意 多次操作 查询并修改区间内长度==len的第一次出现位置 修改区间,变为空 思路 类似于求区间最大子段和(应该是这个吧,反正我没做过) 维护区间rt的 从l开始向右的最长长度 从r开始向左的 ...
- Win10重命名文件夹导致资源管理器卡顿的解决办法
我本机使用的是 Win10 1607,不清楚是因为什么原因导致重命名文件夹时资源管理器会被卡死,找了很长时间终于找到了解决办法,现在我把步骤粘出来以便后续遇到相同问题的朋友能及时解决. 其实操作很简单 ...
- Java东西太多,记录一些知识点
实习两个月了,这两个月接触了不少东西,简单列举一下知识,未来需要多多学习和了解. 1.前端js.extjs4.Jquery(js框架这些基本现学现用): 2.基础不好要补补Servlet和JSP(再往 ...
- 【Ctsc2011】幸福路径
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2306 给定一张有向图,每个点有权值,蚂蚁从某个节点出发,初始体力值为$1$,每走一条边$体 ...
- go 并发 demo
两个进程执行两个goroutine // This sample program demonstrates how to create goroutines and // how the schedu ...