java 原子類

來源:互聯網
上載者:User

標籤:volatile   port   code   mod   輸送量   pac   類變數   icm   demo   

一.基本類原子操作

  基本類原子操作的類主要有:AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference<V>

  基本類的原子操作主要是對boolean,Integer,long,reference定義的變數進行原子性的操作,簡單點說就是它提供的方法都是原子性的,不會出現線程之間存在的問題

 

二.原子更新

AtomicIntegerFieldUpdater<T>,

AtomicLongFieldUpdater<T>,

AtomicReferenceFieldUpdater<T,V>

  原子更新類的實用和操作和基本類原子操作方式大同小異,但是在使用的過程中會存在一些約束:

  (1)欄位必須是volatile類型

  (2)調用者能夠直接操作對象欄位,那麼就可以反射進行原子操作。但是對於父類的欄位,子類是不能直接操作的,儘管子類可以訪問父類的欄位。

  (3)只能是執行個體變數,不能是類變數,也就是說不能加static關鍵字。

  (4)只能是可修改變數,不能使final變數,因為final的語義就是不可修改。

  (5)對於AtomicIntegerFieldUpdaterAtomicLongFieldUpdater只能修改int/long類型的欄位,不能修改其封裝類型(Integer/Long)。如果要修改封裝類型就需要

使用AtomicReferenceFieldUpdater

  

package com.study.refrence;import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;public class AtomicIntegerFieldUpdaterDemo {    class DemoData {        public volatile int value1 = 1;        volatile int value2 = 2;        protected volatile int value3 = 3;        private volatile int value4 = 4;    }    AtomicIntegerFieldUpdater<DemoData> getUpdater(String fieldName) {        return AtomicIntegerFieldUpdater.newUpdater(DemoData.class, fieldName);    }    void doit() {        DemoData data = new DemoData();        System.out.println("1 ==> " + getUpdater("value1").getAndSet(data, 10));        System.out.println("3 ==> " + getUpdater("value2").incrementAndGet(data));        System.out.println("2 ==> " + getUpdater("value3").decrementAndGet(data));        System.out.println("true ==> " + getUpdater("value4").compareAndSet(data, 4, 5));    }    public static void main(String[] args) {        AtomicIntegerFieldUpdaterDemo demo = new AtomicIntegerFieldUpdaterDemo();        demo.doit();    }}

 

   

三.原子數組類操作

  AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray<E>

  這些類除了進行操作的對象更改為數組之外,與基本類原子操作並沒有什麼大的區別.

  

四.帶有標記位的對象引用

    AtomicMarkableReference類描述的一個<Object,Boolean>的對,可以原子的修改Object或者Boolean的值,這種資料結構在一些緩衝或者狀態原因中比較有用。

這種結構在單個或者同時修改Object/Boolean的時候能夠有效提高輸送量。

     AtomicStampedReference類維護帶有整數“標誌”的對象引用,可以用原子方式對其進行更新。對比AtomicMarkableReference類的<Object,Boolean>,

AtomicStampedReference維護的是一種類似<Object,int>的資料結構,其實就是對對象(引用)的一個並發計數。但是與AtomicInteger不同的是,此資料結構可以攜帶

一個對象引用(Object),並且能夠對此對象和計數同時進行原子操作。

java 原子類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.