`
luccs624061082
  • 浏览: 84484 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Atomic Variables 原子变量

阅读更多
java.util.concurrent.atmoic包定义了类,在单一变量上支持原子操作。所有的类有get和set方法,这些将在volatile变量上进行读写。即,在同一变量上set和后续的get有一个happens-before关系。原子compareAndSet 方法也有这些内存持续性功能,就像在整形原子变量上做简单的运算方法。


  为了看这个包如何使用的,让我们返回原先演示线程接口的Counter方法。

  class Counter {
    private int c = 0;

    public void increment() {
        c++;
    }

    public void decrement() {
        c--;
    }

    public int value() {
        return c;
    }
  }

  一种使Counter安全防范线程争用,是使它的方法同步,就像SynchronizedCounter,

  class SynchronizedCounter {
    private int c = 0;

    public synchronized void increment() {
        c++;
    }

    public synchronized void decrement() {
        c--;
    }

    public synchronized int value() {
        return c;
    }
}

对于这个简单类,同步是一个可选方案。但是对于一个复杂的类,我们可能想避免不必要的同步带来的活性缺失。作为使用AtomicInteger声明字段允许我们防范线程争用而不依赖同步的替代,如 AtomicCounter:

  import java.util.concurrent.atomic.AtomicInteger;

class AtomicCounter {
    private AtomicInteger c = new AtomicInteger(0);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }

    public int value() {
        return c.get();
    }

}


分享到:
评论

相关推荐

    STM32MP135实现原子变量驱动【支持STM32MP1系列单片机_Linux驱动】.zip

    原子变量(Atomic Variables)在多线程编程中扮演着重要角色,它们保证了在并发环境下对变量的操作不会被中断,确保数据的一致性和完整性。在Linux内核中,原子操作通常用于保护共享资源,避免数据竞争。STM32MP135...

    STM32MP157实现原子变量【支持STM32MP1系列单片机_Linux驱动】.zip

    在Linux驱动开发中,原子变量(atomic variables)常用于维护共享数据,保证在并发环境中数据的一致性。STM32MP157的Linux驱动可能包含了以下关键知识点: 1. **原子操作函数**:Linux内核提供了原子操作的API,如`...

    C++多线程编程介绍,技巧及注意要点--Part2.pptx

    C++11和C++14引入了丰富的多线程支持,包括原子变量(atomic variables)和内存顺序(memory ordering),这两个概念是理解和解决多线程数据竞争问题的关键。 内存模型是多线程编程中的核心概念,它描述了在多线程...

    在JAVA中线程起到的作用.pdf

    4. **原子变量(Atomic Variables)**:`java.util.concurrent.atomic`包中的原子变量类如`AtomicInteger`、`AtomicLong`等,提供了一种无锁的线程安全更新方式,它们的更新操作具有原子性。 5. **线程间通信...

    同步处理

    此外,我们还可以使用原子变量(Atomic Variables),如Java中的`AtomicInteger`、`AtomicLong`等,它们提供了一种无需同步就能更新变量的方法,适用于简单且高性能的场景。 在工具有关的上下文中,有一些工具可以...

    JAVA并发编程实践高清版带书签PDF

    6. **原子变量(Atomic Variables)**:介绍了AtomicInteger、AtomicLong等原子类,它们提供了一种无锁的并发编程方式,可以在不使用锁的情况下保证数据的一致性。 7. **并发工具类**:包括ExecutorService、Future...

    用成员变量进行线程通信.rar_线程通信

    6. **原子变量(Atomic Variables)**:如`AtomicInteger`,提供了原子操作,保证了在多线程环境下的数据一致性。 在"Example062"这个示例中,可能演示了如何使用成员变量和上述的一些线程通信技术。通过分析源代码...

    实现Java高并发隔离 模拟

    5. **原子变量(Atomic Variables)**:`java.util.concurrent.atomic`包提供了原子变量类,如`AtomicInteger`、`AtomicLong`等,它们支持原子操作,无需锁即可实现线程安全。 6. **并发容器(Concurrent ...

    JUC线程锁框架

    1. **原子变量(Atomic Variables)** JUC提供了一系列的原子变量类,如AtomicInteger、AtomicLong等,它们实现了在无同步的情况下进行原子操作,确保在多线程环境下数据的一致性。这些类通过CAS(Compare and Swap...

    Java语言中非阻塞算法的实现.zip

    1. **原子变量(Atomic Variables)**: Java提供了一组`Atomic`类,如`AtomicInteger`、`AtomicLong`和`AtomicReference`,它们提供了原子操作,保证了在多线程环境下的数据一致性。这些类的更新操作是不可分割的...

    JSR133中文版.pdf

    3. **原子变量类(Atomic Variables)**:JSR133引入了`java.util.concurrent.atomic`包,包含了一系列原子操作类,如AtomicInteger、AtomicLong等,它们提供了无锁的更新机制,提高了并发性能。 4. **线程安全的...

    多线程编程之三 讲解+例程

    5. **原子变量(Atomic Variables)**:如java.util.concurrent.atomic包下的原子类,如AtomicInteger、AtomicLong等,提供了原子操作,可以在不使用锁的情况下实现线程安全的变量更新。 6. **阻塞队列...

    工作在同一个java虚拟机中的线程能实现消息互发(alpha)

    5. **原子变量(Atomic Variables)**:`java.util.concurrent.atomic`包提供了原子操作类,如`AtomicInteger`、`AtomicLong`等,它们在多线程环境下提供了无锁的数据更新机制。 6. **管程(Java 5后引入的`java....

    Java分布式应用学习笔记03JVM对线程的资源同步和交互机制

    4. **原子变量(Atomic Variables)**:Java提供了原子变量类,如`AtomicInteger`、`AtomicLong`等,这些类中的方法都是原子性的,可以在不使用锁的情况下更新共享变量,从而提高程序的并发性能。 5. **线程间通信*...

    11_内存分配 视频

    volatile关键字、synchronized关键字以及最近引入的原子变量类(Atomic Variables)都是实现线程安全和内存可见性的工具。 最后,Java内存优化也是开发者关注的焦点。通过合理的对象设计、内存池的使用、减少冗余...

    JVM中编译Class、内存回收、多线程原理和使用

    线程同步机制包括锁(synchronized关键字)、信号量(Semaphore)、条件变量(Condition)、原子变量(Atomic Variables)等,用于解决竞态条件和死锁问题。线程间通信则可以通过wait/notify、join、中断等机制实现...

    java线程文档大全

    12. **原子量(Atomic Variables)**:Java.util.concurrent.atomic包提供了原子变量类,如AtomicInteger,它们支持无锁的原子操作,适合在高并发场景下更新变量。 13. **障碍器(Barriers)**:CyclicBarrier和...

    windows内存共享进程间通信

    - **全局原子**(Global Atomic Variables):全局原子变量是一种简单的内存共享方式,用于存储简单的共享数据,如计数器等。 - **内存段**(Memory Segments):通过创建并共享内存段,进程可以访问同一块内存。...

    国内知名IT公司面试题--揭秘(附答案)

    4. **原子变量(Atomic Variables)**:如AtomicInteger,AtomicLong等,它们提供了一种无需锁定的并发操作方式。 【字符流与字节流】 字符流处理的是字符,适合处理文本数据,如Reader和Writer系列。字节流处理的...

    java实现多线程间的通信

    b) 原子变量(Atomic Variables):如java.util.concurrent.atomic包下的原子类,它们提供了一种无锁的线程间数据交换方式,适用于简单同步场景。 c) 线程安全的数据结构:如ConcurrentHashMap、...

Global site tag (gtag.js) - Google Analytics