`

Java并发中的原子操作包java.util.concurrent.atomic

    博客分类:
  • java
 
阅读更多

java.util.concurrent.atomic下支持并发的原子操作

Java代码 复制代码 收藏代码
  1. java.util.concurrent.atomic.AtomicStampedReference<V>;
  2. java.util.concurrent.atomic.AtomicInteger;
  3. java.util.concurrent.atomic.AtomicBoolean;
  4. java.util.concurrent.atomic.AtomicIntegerArray;
  5. java.util.concurrent.atomic.AtomicLong;
  6. java.util.concurrent.atomic.AtomicLongArray;
  7. java.util.concurrent.atomic.AtomicMarkableReference<V>;
  8. java.util.concurrent.atomic.AtomicReference<V>;
  9. java.util.concurrent.atomic.AtomicReferenceArray<E>;
java.util.concurrent.atomic.AtomicStampedReference<V>;
java.util.concurrent.atomic.AtomicInteger;
java.util.concurrent.atomic.AtomicBoolean;
java.util.concurrent.atomic.AtomicIntegerArray;
java.util.concurrent.atomic.AtomicLong;
java.util.concurrent.atomic.AtomicLongArray;
java.util.concurrent.atomic.AtomicMarkableReference<V>;
java.util.concurrent.atomic.AtomicReference<V>;
java.util.concurrent.atomic.AtomicReferenceArray<E>;

以AtomicInteger为例我们看下他的并发实现:

Java代码 复制代码 收藏代码
  1. publicfinalint getAndSet(int newValue) {
  2. for (;;) {
  3. int current = get();
  4. if (compareAndSet(current, newValue))
  5. return current;
  6. }
  7. }
    public final int getAndSet(int newValue) {
        for (;;) {
            int current = get();
            if (compareAndSet(current, newValue))
                return current;
        }
    }

在借助了死循环借助compareAndSet实现了原子操作,而compareAndSet的实现如下:

Java代码 复制代码 收藏代码
  1. publicfinalboolean compareAndSet(int expect, int update) {
  2. return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
  3. }
public final boolean compareAndSet(int expect, int update) {
	return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

我们发现他借助了Unsafe实现了其原子操作,Unsafe 是基于CAS(compare and swap)的,CAS是现代CPU提供给并发程序使用的原语操作. 不同的CPU有不同的使用规范.在 Intel 处理器中,比较并交换通过指令的 cmpxchg 系列实现。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B).JUC里的原子类的实现都是通过CAS,CAS能更高效的从机器码层面提供并发操作.

原文地址:http://smallnetvisitor.iteye.com/blog/1872984

分享到:
评论

相关推荐

    java.util.concurrent 学习ppt

    Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...

    kotlinx.atomicfu,在kotlin中使用原子操作的惯用方法.zip

    在这些平台上,Java的`java.util.concurrent.atomic`包并不适用,而AtomicFu则提供了类似的功能。 原子操作是一种在多线程环境下非常重要的机制,它们能够保证在执行过程中不会被其他线程中断,从而确保了数据的...

    Java并发编程从入门到精通源码.rar

    再者,`java.util.concurrent.atomic`包中的原子类提供了非阻塞的线程安全操作,如`AtomicInteger`、`AtomicLong`等,它们使用CAS(Compare and Swap)操作实现无锁编程,提高了并发性能。 最后,死锁、活锁和饥饿...

    java 并发编程的艺术pdf清晰完整版 源码

    6. **原子变量与并发工具类**:Java的并发包(java.util.concurrent.atomic)提供了原子变量,如AtomicInteger,它们能保证在并发环境下的原子性操作。此外,书中还会涵盖其他并发工具类,如Semaphore、...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    Java并发编程:设计原则与模式(Concurrent.Programming.in.Java)(中英版)

    例如,使用无锁数据结构或原子操作(`java.util.concurrent.atomic`包)。 3. **避免死锁、活锁和饥饿**:理解并预防这些并发问题至关重要。死锁发生在两个或多个线程相互等待对方释放资源导致僵局;活锁是线程不断...

    [Java并发编程实践].(Java.Concurrency.in.Practice).Brian.Goetz.文字版(1)

    4. **原子变量**:Atomic类(如AtomicInteger、AtomicBoolean等)提供了原子操作,能够在无锁的情况下实现线程间的协作,提高了并发性能。 5. **并发设计模式**:书中详细阐述了几种常见的并发设计模式,如生产者-...

    Java并发基础共6页.pdf.zip

    3. **线程同步**:为了避免多个线程对共享数据的竞态条件,Java提供了多种同步机制,如`synchronized`关键字、`volatile`变量、`Lock`接口(包括`ReentrantLock`)以及`java.util.concurrent.atomic`包下的原子类。...

    backport-util-concurrent(2.2 /3.1)

    - 虽然Java 5引入了Atomic包,但在backport-util-concurrent中,你可以找到一些基本的原子操作类,如AtomicInteger和AtomicLong,它们提供了无锁的整数和长整型变量操作,提高了并发环境下的性能。 总的来说,...

    java多线程中的原子操作

    在Java中,`java.util.concurrent.atomic`包提供了多种原子类,如AtomicInteger、AtomicLong等,这些类支持原子性的增加、减小、更新等操作,避免了显式的同步锁的使用,提高了并发性能。例如,AtomicInteger的...

    Java并发编程代码(包含运行依赖库)

    7. **原子类**:`java.util.concurrent.atomic`包中的原子类,如`AtomicInteger`、`AtomicLong`等,提供了在无同步情况下更新值的能力,确保操作的原子性。 这个压缩包中的“Java CIP”可能包含了Java并发编程的...

    java并发实战中文文档

    6. **原子类**:`java.util.concurrent.atomic`包提供了原子变量,如`AtomicInteger`、`AtomicLong`等,它们支持原子性的读/修改/写操作,避免了显式的同步。 7. **并发设计模式**:文档会探讨一些在并发环境中常用...

    Java并发编程设计原则与模式.pdf

    2. **Java并发API**:Java提供了丰富的并发API,如`java.util.concurrent`包下的Thread、ExecutorService、Semaphore、CountDownLatch、CyclicBarrier、ThreadPoolExecutor等类,这些都是并发编程中的重要工具。...

    java并发编程实践pdf笔记

    - **使用并发原语** 例如`java.util.concurrent.atomic`包中的原子变量,可以提供轻量级的线程安全。 通过这些笔记,我们可以了解到Java并发编程中的关键概念和实践,对于理解和编写高效的并发代码具有极大的帮助...

    java并发编程分享

    `java.util.concurrent.atomic`包提供了原子变量类,如AtomicInteger和AtomicReference,它们通过CAS(Compare and Swap)无锁算法实现线程安全的更新操作。 10. **中断和异常处理** Thread类的interrupt()方法...

    Java并发编程学习笔记.

    10. **原子类**:`java.util.concurrent.atomic`包下的原子类如`AtomicInteger`、`AtomicLong`等,提供了基于CAS(Compare and Swap)的无锁操作,用于在多线程环境下实现高效且线程安全的操作。 11. **Future和...

    java并发编程:设计原则与模式.rar

    Java并发工具类库(java.util.concurrent)是并发编程中的另一个重要主题,包括Atomic类(提供原子操作)、Semaphore(信号量)、CountDownLatch(计数器门锁)、CyclicBarrier(循环栅栏)和Exchanger(交换器)等...

    (PDF带目录)《Java 并发编程实战》,java并发实战,并发

    4. **并发工具类**:`java.util.concurrent`包还包含一系列并发工具类,如`ExecutorService`、`Future`、`Callable`等,它们简化了任务的提交、管理和结果获取,使并发编程更加灵活和高效。 5. **原子变量**:Java...

    关于 java.util.concurrent 您不知道的 5 件事,第 2 部分

    在Java编程领域,`java.util.concurrent`包是并发编程的核心工具包,提供了高效、线程安全的类和接口,使得开发者能够更容易地处理多线程环境。本篇将深入探讨这个包中一些鲜为人知的知识点,以帮助你提升并发编程的...

Global site tag (gtag.js) - Google Analytics