原子操作

简介: <span style="font-family:微软雅黑; font-size:14px; line-height:33px"><span style="background-color:inherit; font-size:22px">定义:</span><span style="font-family:Arial; background-color:inherit">一个操作是<sp
定义:一个操作是原子的(atomic),如果这个操作所处的层(layer)的更高层不能发现其内部实现与结构。
      1、 原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序是不可以被打乱,或者切割掉只执行部分。 
视作整体式原子性的核心。
        2、在多进程(线程)访问资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。原子操作(atomic operation)是不需要synchronized,这是Java多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。通常所说的原子操作包括对非long和double型的primitive进行赋值,以及返回这两者之外的primitive。之所以要把它们排除在外是因为它们都比较大,而JVM的设计规范又没有要求读操作和赋值操作必须是原子操作(JVM可以试着去这么作,但并不保证)。
        3、primitive主数据类型。java等编程语言中的默认基本数据类型,如:int,long等。
--百度百科

        java.util.concurrent.atomic 包中提供了以下原子类, 它们线程安全,并非通过同步和锁来实现的。
AtomicBoolean -- 原子布尔
AtomicInteger -- 原子整型
AtomicIntegerArray -- 原子整型数组
AtomicIntegerFieldUpdater -- 用来包裹对整形 volatile 域的原子操作 
AtomicLong -- 原子长整型
AtomicLongArray -- 原子长整型数组
AtomicLongFieldUpdater -- 用来包裹对长整型 volatile 域的原子操作 
AtomicMarkableReference -- 原子标记引用 
AtomicReference -- 原子引用
AtomicReferenceArray -- 原子引用数组
AtomicReferenceFieldUpdater -- 用来包裹对对象 volatile 域的原子操作 
AtomicStampedReference -- 原子戳记引用
DoubleAccumulator    @since 1.8
DoubleAdder    @since 1.8
LongAccumulator    @since 1.8
LongAdder    @since 1.8
        引入这些类是为了实现一种所谓的无锁定且无等待算法,如: 比较并交换 (CAS), 它的原理是比较当前值与期望值, 如果相同则表示该变量没有发生变化。



目录
相关文章
|
7月前
【原子操作】顺序操作
【原子操作】顺序操作
|
7月前
|
应用服务中间件 Linux 调度
锁和原子操作CAS的底层实现
锁和原子操作CAS的底层实现
58 0
|
存储 编译器 API
锁与原子操作CAS
锁与原子操作CAS
149 0
|
4月前
|
存储 算法
什么是原子操作?
【8月更文挑战第24天】
74 0
|
6月前
|
安全 程序员 C++
C++一分钟之-原子操作与线程安全
【6月更文挑战第27天】**C++的`std::atomic`提供线程安全的原子操作,解决多线程数据竞争。涵盖原子操作概念、应用、问题与对策。例如,用于计数器、标志位,但选择数据类型、内存顺序及操作组合需谨慎。正确使用能避免锁,提升并发性能。代码示例展示自旋锁和线程安全计数。了解并恰当运用原子操作至关重要。**
97 1
多线程的原子操作
多线程的原子操作
65 0
|
7月前
|
算法
原子操作CAS
原子操作CAS
42 0
|
7月前
|
缓存 Linux API
原子操作CAS与锁实现
原子操作CAS与锁实现
|
7月前
|
存储 缓存 算法
理解原子操作与CAS锁
理解原子操作与CAS锁
83 0
|
7月前
|
存储 安全 中间件
锁与原子操作CAS的底层实现
锁与原子操作CAS的底层实现