博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 原子操作
阅读量:4050 次
发布时间:2019-05-25

本文共 1092 字,大约阅读时间需要 3 分钟。

-- Start

java.util.concurrent.atomic 包中提供了以下原子类, 它们是线程安全的类, 但是它们并不是通过同步和锁来实现的, 原子变量的操作会变为平台提供的用于并发访问的硬件原语.

  • AtomicBoolean -- 原子布尔
  • AtomicInteger -- 原子整型
  • AtomicIntegerArray -- 原子整型数组
  • AtomicLong -- 原子长整型
  • AtomicLongArray -- 原子长整型数组
  • AtomicReference -- 原子引用
  • AtomicReferenceArray -- 原子引用数组
  • AtomicMarkableReference -- 原子标记引用
  • AtomicStampedReference -- 原子戳记引用
  • AtomicIntegerFieldUpdater -- 用来包裹对整形 volatile 域的原子操作
  • AtomicLongFieldUpdater -- 用来包裹对长整型 volatile 域的原子操作
  • AtomicReferenceFieldUpdater -- 用来包裹对对象 volatile 域的原子操作

引入这些类的主要原因是为了实现一种所谓的无锁定且无等待算法. 如: 比较并交换 (CAS), 它的原理是比较当前值与期望值, 如果相同则表示该变量没有发生变化. 如下面的例子使用同步和CAS方式来实现一个ID生成器.

同步实现方式

class IDGenerator {	private int id;	public IDGenerator() {	}	public synchronized int nextInt() {		return ++id;	}}

CAS实现方式

class IDGenerator {	private final AtomicInteger id = new AtomicInteger(0);	public IDGenerator() {	}	public int nextInt() {		while (true) {			int oldID = id.get();			int newID = oldID + 1;			if (id.compareAndSet(oldID, newID))				return newID;		}	}}

---
更多参见:
--
声 明:转载请注明出处
-- Last Updated on 2012-07-16
-- Written by ShangBo on 2012-07-16
-- End
你可能感兴趣的文章
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>
gstreamer相关工具集合
查看>>