您的位置:首页 > 编程语言 > Java开发

Java中的Atomic包使用指南

2016-12-28 16:25 417 查看
java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类

java的并发包中底层大量的使用这个类的功能,了解这个类有助于了解java 并发包,理解为什么并发包中的类的并发性能为什么会比使用synchronized好

Atomic包介绍

在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新字段。Atomic包里的类基本都是使用Unsafe实现的包装类。

原子更新基本类型类

用于通过原子的方式更新基本类型,Atomic包提供了以下三个类:

AtomicBoolean:原子更新布尔类型。

AtomicInteger:原子更新整型。

AtomicLong:原子更新长整型。

AtomicInteger的常用方法如下:

int addAndGet(int delta) :以原子方式将输入的数值与实例中的值(AtomicInteger里的value)相加,并返回结果

boolean compareAndSet(int expect, int update) :如果输入的数值等于预期值,则以原子方式将该值设置为输入的值。

int getAndIncrement():以原子方式将当前值加1,注意:这里返回的是自增前的值。

void lazySet(int newValue):最终会设置成newValue,使用lazySet设置值后,可能导致其他线程在之后的一小段时间内还是可以读到旧的值。

int getAndSet(int newValue):以原子方式设置为newValue的值,并返回旧值。

AtomicInteger的demo:

import java.util.concurrent.atomic.AtomicInteger;

public class Main {
static Integer a=3;
static AtomicInteger ai = new AtomicInteger(a);
public static void main(String[] args) {
System.out.println(ai.getAndIncrement());
System.out.println(ai.get());
System.out.println(a);
}
}


10
11
11


View Code

http://ifeve.com/java-atomic/

http://blog.csdn.net/zhangerqing/article/details/43057799
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: