【Java基础】线程笔记——原子操作:atomic

atomic不会阻塞线程。是加强版的volatile原子操作。主要用于高并发环境高效程序处理

了解volatile

  1. 修饰变量
  2. 易变的、不稳定的
  3. 从内存种获取值
  4. 读取/写入不需要锁
  5. 提供了内存可见性,但是没提供原子性。不适用高并发场景

volatile与加锁机制主要的区别:前者只提供了内存可见性。后者还提供了原子性

atomic处理类

java.util.concurrent.atomic
  • 基本类: AtomicInteger、AtomicLong、AtomicBoolean
  • 引用类型: AtomicReference
  • 数组类型: AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray
  • 属性原子修改器: AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater、

相关api

这里写图片描述

get() 获取值
getAndSet() 取当前值并设置新值
getAndIncrement() 获取当前的值,自增
getAndDecrement() 获取当前的值,自减
getAndAdd() 获取当前的值,加上预期值

public static void main(String[] args) {
        AtomicInteger atomicNumber = new AtomicInteger(0);
        System.out.println(atomicNumber.get());//0
        System.out.println(atomicNumber.getAndSet(7));//0
        System.out.println(atomicNumber.getAndIncrement());//7
        System.out.println(atomicNumber.getAndDecrement());//8
        System.out.println(atomicNumber.getAndAdd(10));//7
        System.out.println(atomicNumber.get());//17
}

原理:利用CPU比较并交换(CAS) 和 非阻塞算法。有些方法是通过调用JNI(JavaNativeInterface)实现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值