没有合适的资源?快使用搜索试试~ 我知道了~
Java16个原子类介绍-基于JDK8.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 99 浏览量
2022-06-21
21:50:28
上传
评论
收藏 149KB DOCX 举报
温馨提示
试读
12页
在JDK7包括7之前,java原子类有12个,图片如下,有些资料说有13个,多出来的是 AtomicBooleanArray 类,可是我在JDK8之前的源码里并没有发现有这个类,当然我也没去8以上的版本去看,所以这里不确定这个类到底在哪个版本中存在。
资源推荐
资源详情
资源评论
Java16 个原子类介绍-基于 JDK8
前言
emmmm,在写文章前我也翻阅了好多资料和书籍,其实大家在对原子类方法
的使用介绍基本都没问题,但是对于 java 中原子类的个数是五花八门,下面我
就把自己都认知和书籍资料结合起来给大家简单都介绍下 java 中原子类的应用。
参考文献
《Java 并发编程的艺术》
正文
关于原子类个数说明
在 JDK7 包括 7 之前,java 原子类有 12 个,图片如下,有些资料说有 13 个,
多出来的是 AtomicBooleanArray 类,可是我在 JDK8 之前的源码里并没有发现
有这个类,当然我也没去 8 以上的版本去看,所以这里不确定这个类到底在哪
个版本中存在。
在 JDK8 时出现了 4 个原子操作类,分别是如下图片所示
原子更新基本类型类
使用原子的方式更新基本类型,Atomic 包提供了以下 3 个类。
AtomicBoolean: 原子更新布尔类型。
AtomicInteger: 原子更新整型。
AtomicLong: 原子更新长整型。
以上 3 个类提供的方法几乎一模一样,以 AtomicInteger 为例进行详解,
AtomicIngeter 的常用方法如下:
int addAndGet(int delta): 以原子的方式将输入的数值与实例中的值相加,并返回结
果。
boolean compareAndSet(int expect, int update): 如果输入的值等于预期值,则以
原子方式将该值设置为输入的值。
int getAndIncrement(): 以原子的方式将当前值加 1,注意,这里返回的是自增前的
值,也就是旧值。
void lazySet(int newValue): 最终会设置成 newValue,使用 lazySet 设置值后,可能
导致其他线程在之后的一小段时间内还是可以读到旧的值。
int getAndSet(int newValue): 以原子的方式设置为 newValue,并返回旧值。
代码示例
static AtomicInteger ai =new AtomicInteger(1);
public static void main(String[] args) {
System.out.println(ai.getAndIncrement());
System.out.println(ai.get());
}
输出结果
1
2
下面我们看看 getAndIncrement() 是如何实现原子操作的
public final int getAndIncrement() {
return unsafe.getAndAddInt(this, valueOffset, 1);
}
public final int getAndAddInt(Object var1, long var2, int var4) {
剩余11页未读,继续阅读
资源评论
小兔子平安
- 粉丝: 211
- 资源: 1940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功