源碼閱讀 AtomicInteger

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。?

AtomicInteger 原子整數
可以原子更新的int值。
用于原子遞增計數器等應用程序中,不能用作java.lang.Integer的替換。
擴展了Number。# 1.繼承關系:public class AtomicInteger extends Number implements java.io.Serializable # 2. 屬性、代碼塊:// Unsafe的實例private static final Unsafe unsafe = Unsafe.getUnsafe();// value字段的偏移量private static final long valueOffset;// 得 value 的偏移量static {try {valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));} catch (Exception ex) { throw new Error(ex); }}// 用于存儲 int 的值。private volatile int value;# 3.方法:// 構造public AtomicInteger(int initialValue) {value = initialValue;}public AtomicInteger() {}public final int get() {return value;}public final void set(int newValue) {value = newValue;}// set的延遲實現,不保證值的改變立即被其他線程看到。public final void lazySet(int newValue) {unsafe.putOrderedInt(this, valueOffset, newValue);}// 原子地設置為給定值并返回舊值。public final int getAndSet(int newValue) {return unsafe.getAndSetInt(this, valueOffset, newValue);}// compareAndSwapInt方法參數:this操作的對象;// valueOffset對象中字段的偏移量;// expect原來的值,即期望的值;update要修改的值;public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}// 原子地將值設置為給定的更新值public final boolean weakCompareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}// 原子性地自增 1 。// 參數:this操作的對象;valueOffset對象中字段的偏移量; 1 要增加的值。// 返回的是未自增前的值。public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset, 1);}// 原子性地自減 1 。 返回的是未自減前的值。public final int getAndDecrement() {return unsafe.getAndAddInt(this, valueOffset, -1);}// 原子地將給定值添加到當前值。public final int getAndAdd(int delta) {return unsafe.getAndAddInt(this, valueOffset, delta);}// 原子性地自增 1 。 返回的是自增后的值。public final int incrementAndGet() {return unsafe.getAndAddInt(this, valueOffset, 1) + 1;}// // 原子性地自減 1 。 返回的是自減后的值。public final int decrementAndGet() {return unsafe.getAndAddInt(this, valueOffset, -1) - 1;}// 原子地將給定值添加到當前值。public final int addAndGet(int delta) {return unsafe.getAndAddInt(this, valueOffset, delta) + delta;}// 原子地用應用給定函數的結果更新當前值,并返回上一個值。public final int getAndUpdate(IntUnaryOperator updateFunction) {int prev, next;do {prev = get();next = updateFunction.applyAsInt(prev);} while (!compareAndSet(prev, next));return prev;}// 原子地使用應用給定函數的結果更新當前值,并返回更新的值。public final int updateAndGet(IntUnaryOperator updateFunction) {int prev, next;do {prev = get();next = updateFunction.applyAsInt(prev);} while (!compareAndSet(prev, next));return next;}// 原子性地使用將給定函數應用于當前值和給定值的結果更新當前值,并返回上一個值。public final int getAndAccumulate(int x,IntBinaryOperator accumulatorFunction) {int prev, next;do {prev = get();next = accumulatorFunction.applyAsInt(prev, x);} while (!compareAndSet(prev, next));return prev;}// 原子性地使用將給定函數應用于當前值和給定值的結果更新當前值,并返回更新后的值。public final int accumulateAndGet(int x,IntBinaryOperator accumulatorFunction) {int prev, next;do {prev = get();next = accumulatorFunction.applyAsInt(prev, x);} while (!compareAndSet(prev, next));return next;}// 轉為字符串。public String toString() {return Integer.toString(get());}// 得int、long、float、double值。public int intValue() {return get();}public long longValue() {return (long)get();}public float floatValue() {return (float)get();}public double doubleValue() {return (double)get();}

?

其它 :

int a =0;

return ++a ;? 輸出 1。

return a++ ;? 輸出 0。

這是非原子性的操作。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447478.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

A飯福利,AMD Mantle API獲眾多游戲開發商青睞!

摘要:Videocardz整理了一份2014年—2015年支持AMD Mantle游戲列表,并公布了游戲開發商及游戲引擎的名稱。已發布且支持Mantle的游戲主要有《戰地4》、《神偷4》、《植物大戰僵尸:花園戰爭》以及《狙擊精英3》這四款。 現如今,越來…

linux 安裝 maven 、解決:bash: mvn: command not found

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、安裝 wget 命令: yum -y install wget 2、下載maven安裝包 wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/a…

軟件工程師必學的9件事

本文是html5tricks原創翻譯,轉載請看清文末的轉載要求,謝謝合作! 三年前,我還在巴塞羅那的神經科學實驗室工作,忙著研究腦電波、教授心理學上的認知系統課程。而今天,我以設計和寫軟件為生。 你或許會滿頭…

Linux 的 chmod 命令,對一個目錄及其子目錄所有文件添加權限

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 對一個目錄及其子目錄所有文件添加權限 命令: chmod 777 -R ./html 給予html目錄下可讀可寫可操作權限。 或者 chmod -R…

Linux 下壓縮與解壓.zip 和 .rar

1)對于.ziplinux下提供了zip和unzip程序,zip是壓縮程序,unzip是解壓程序。它們的參數選項很多,可用命令zip -help和unzip -help查看,這里只做簡單介紹,舉例說明一下其用法:# zip test.zip test.jpg test.pn…

優秀的程序員VS糟糕的程序員

優秀的程序員和一般的程序員差別在哪里?怎么才能成為優秀的程序員?我們選擇了這個職業就要把他做好! 優秀的程序員: 1、邏輯能力很強,這也是解決問題的關鍵。 2、分析能力。可以很好的解決復雜問題。 3、事情做得專…

圖解 Java 常用數據結構

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 最近在整理數據結構方面的知識, 系統化看了下Java中常用數據結構, 突發奇想用動畫來繪制數據流轉過程. 主要基于jdk8, 可能會有些特性與…

程序員生存定律--使人生永動的勢能

程序員生存定律這系列的目錄在這里:程序員生存定律--目錄 喜歡從頭瞄的,可以移步。 ------------------------------------------------------------------------------- 這篇說的是精神,比較務虛,不感興趣的可以略過。 在國內有…

int 和 Integer 的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、Integer是int的包裝類,int則是java的一種基本數據類型 2、Integer變量必須實例化后才能使用,而int變量不需要…

度量術語之二:應用類和開發類生產率(實際度量案例)

一個令人震驚的事實是連生產率這種常見度量數據都沒有一個簡單的定義。連我們日常經常用到的公式:生產率工作產品/工作量(工作產品可以是代碼行,功能點,也可以是任何可以計數的東西,比如文檔頁數)都是錯誤的…

注解 @ModelAttribute 運用詳細介紹

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。1.ModelAttribute注釋方法   例子(1),(2),(3&#x…

編程語言 IDE 對比

IDE是集成開發環境的英文縮寫,所謂集成開發環境,就是將你在開發過程中所需要的工具或功能集成到了一起,比如代碼編寫、分析、編譯、調試等功能,從而最大化地提高開發者的工作效率。每種編程語言都有一些特定的IDE,本文…

強制更新 maven 緩存

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 mvn dependency:purge-local-repository

程序員為什么那么難升職

一個有趣的現象是老程序員很難升職,如果你因為3K工資太低而要辭掉工作,你的上司寧可去外面找一個5K工資的新人,也不會來挽留你。那么程序員為什么那么難升職,這里總結了幾點。你上司的問題你晉升困難,最大的主觀原因在…

Docker 安裝 Redis (Redis 配置)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 獲取 redis 鏡像 docker pull redis 不加版本號默認獲取最新版本,也可以使用 docker search redis 查看鏡像來源 查看本地鏡像…

百度首席科學家 Andrew Ng談深度學習的挑戰和未來

摘要:7月7日上午,百度首席科學家Andrew Ng應邀做客中國科學院自動化研究所并做了《Deep Learning:Overview and trends》的學術報告。 【編者按】人工智能被認為是下一個互聯網大事件,當下,谷歌、微軟、百度等知名的高…

Linux 安裝 jdk ( 兩種方式 )

安裝jdk有兩種方法:手動安裝 yum安裝。 方式一: yum安裝 1、查詢要安裝jdk的版本, 命令:yum -y list java* 2、安裝jdk1.8 yum install -y java-1.8.0-openjdk.x86_64 3、查詢jdk版本:java -version 這樣就安裝成功了。默認…

在動態網絡下實現分布式共享存儲

摘要:本文介紹了分布式環境下實現共享內存模型會遇到的各種問題和挑戰,并針對不同問題介紹多種算法的優劣性。本文是對現階段該領域研究現狀的總體介紹,通過本文能了解動態分布式共享內存研究的前沿狀況、挑戰與機遇。 共享內存系統是普通單…

集合拷貝通用方法、list<A> 轉換成 list<B> (屬性相同)

拷貝2個擁有相同屬性的集合實現: 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 package com.hydbest.app.lbd.marketing.common.utils;import com.alibaba.fastjson.JSON…

Linkedln技術高管Jay Kreps:Lambda架構剖析

摘要:Jay Kreps是Linkedln的一名在線數據架構技術高管,在日常工作中,Jay Kreps經常被問及有關Lambda架構的問題,為此他結合實際經驗和個人體會,針對Lambda架構進行深度剖析,分析了它的優缺點以及采用的替代…