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);
    }
}
3
4
3
View Code

相关文章:

  • 2021-12-15
  • 2022-12-23
  • 2021-07-15
  • 2021-11-10
  • 2021-06-28
  • 2021-07-29
  • 2021-09-25
猜你喜欢
  • 2021-07-16
  • 2021-07-20
  • 2021-05-27
  • 2022-12-23
  • 2021-10-12
  • 2021-09-13
相关资源
相似解决方案