zoukankan      html  css  js  c++  java
  • 什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?

    原子操作(atomic operation)意为不可被中断的一个或一系列操作” 。

    处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作

     Java 中可以通过锁和循环 CAS 的方式来实现原子操作。 CAS 操作——

    Compare & Set,或是 Compare & Swap,现在几乎所有的 CPU 指令都支持 CAS

    的原子操作

    原子操作是指一个不受其他操作影响的操作任务单元原子操作是在多线程环境 

    下避免数据不一致必须的手段

    int++并不是一个原子操作所以当一个线程读取它的值并加 1 另外一个线程 

    有可能会读到之前的值这就会引发错误

    为了解决这个问题必须保证增加操作是原子的 JDK1.5 之前我们可以使用同 

    步技术来做到这一点 JDK1.5,java.util.concurrent.atomic 包提供了 int  

    long 类型的原子包装类它们可以自动的保证对于他们的操作是原子的并且不需 

    要使用同步

    java.util.concurrent 这个包里面提供了一组原子类其基本的特性就是在多线程 

    环境下当有多个线程同时执行这些类的实例包含的方法时具有排他性即当 

    某个线程进入方法执行其中的指令时不会被其他线程打断而别的线程就像 

    自旋锁一样一直等到该方法执行完成才由 JVM 从等待队列中选择一个另一个 

    线程进入这只是一种逻辑上的理解

    原子类:AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference

    原子数组:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray

    原子属性更新器:AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,

    AtomicReferenceFieldUpdater

    解决 ABA 问题的原子类:AtomicMarkableReference(通过引入一个 boolean

    来反映中间有没有变过),AtomicStampedReference(通过引入一个 int 来累 

    加来反映中间有没有变过

  • 相关阅读:
    wget(转)
    852. Peak Index in a Mountain Array
    617. Merge Two Binary Trees
    814. Binary Tree Pruning
    657. Judge Route Circle
    861. Score After Flipping Matrix
    832. Flipping an Image
    461. Hamming Distance
    654. Maximum Binary Tree
    804. Unique Morse Code Words
  • 原文地址:https://www.cnblogs.com/programb/p/12771040.html
Copyright © 2011-2022 走看看