page contents
发现
问答
发起
提问
文章
文章
更多
专家
讲堂
话题
财富榜
商城
Toggle navigation
问答
文章
精品课
商城
冒泡
搜索
我要提问
立即登录
免费注册
首页
问答
正文
什么是原子操作?在 Java Concurrency API 中有哪些原子 类(atomic classes)?
小柒
发布于 2022-10-25 13:56
阅读 708
收藏 0
答案
1
分类:
高并发架构
高并发
编程论坛
默认排序
时间排序
4359
王昭君
2022-10-25 14:04
原子操作(
atomic operation
)意为
”
不可被中断的一个或一系列操
作
”
。
处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的
原子操作。在
Java
中可以通过锁和循环
CAS
的方式来实现原子操
作。
CAS
操作
——Compare & Set
,或是
Compare & Swap
,现在
几乎所有的
CPU
指令都支持
CAS
的原子操作。
原子操作是指一个不受其他操作影响的操作任务单元。原子操作是在
多线程环境下避免数据不一致必须的手段。
int++
并不是一个原子操作,所以当一个线程读取它的值并加
1
时,
另外一个线程有可能会读到之前的值,这就会引发错误。
为了解决这个问题,必须保证增加操作是原子的,在
JDK1.5
之前我
们可以使用同步技术来做到这一点。到
JDK1.5
,
java.util.concurrent.atomic
包提供了
int
和
long
类型的原子包装
类,它们可以自动的保证对于他们的操作是原子的并且不需要使用同
步。
java.util.concurrent
这个包里面提供了一组原子类。其基本的特性就
是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法
时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会
被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行
完成,才由
JVM
从等待队列中选择另一个线程进入,这只是一种逻
辑上的理解。
原子类:
AtomicBoolean
,
AtomicInteger
,
AtomicLong
,
AtomicReference
原子数组:
AtomicIntegerArray
,
AtomicLongArray
,
AtomicReferenceArray
原子属性更新器:
AtomicLongFieldUpdater
,
AtomicIntegerFieldUpdater
,
AtomicReferenceFieldUpdater
解决
ABA
问题的原子类:
AtomicMarkableReference
(通过引入一
个
boolean
来反映中间有没有变过),
AtomicStampedReference
(通过引入一个
int
来累加来反映中间有没有变过)
评论 (
0
)
请先
登录
后评论
您需要登录后才可以回答问题,
登录
或者
注册
关注
1
关注
小柒
提出于 2022-10-25 13:56
全部
小柒 的其他提问
类似问题
运行时异常与一般异常有何异同?
1 回答
708 阅读
String 和StringBuffer的区别?
2 回答
708 阅读
怎样将字符串中第一个字母大写?
3 回答
708 阅读
在Python中如何生成一个随机数?
1 回答
708 阅读
Python中的不可变集合(frozenset)是什么?
1 回答
708 阅读
在Python中怎样获取输入?
1 回答
708 阅读
×
发送私信
发给:
内容:
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因: