最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入了解Java atomic原子類的使用方法和原理

 更新時(shí)間:2019年06月25日 11:09:23   作者:THISISPAN  
這篇文章主要介紹了深入了解Java atomic原子類的使用方法和原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下

在講atomic原子類之前先看一個(gè)小例子:

public class UseAtomic {
public static void main(String[] args) {
AtomicInteger atomicInteger=new AtomicInteger();
for(int i=0;i<10;i++){
Thread t=new Thread(new AtomicTest(atomicInteger));
t.start();
try {
t.join(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(atomicInteger.get());
}
}
class AtomicTest implements Runnable{
AtomicInteger atomicInteger;
public AtomicTest(AtomicInteger atomicInteger){
this.atomicInteger=atomicInteger;
}
@Override
public void run() {
atomicInteger.addAndGet(1);
atomicInteger.addAndGet(2);
atomicInteger.addAndGet(3);
atomicInteger.addAndGet(4);
}
}

最終的輸出結(jié)果為100,可見這個(gè)程序是線程安全的。如果把AtomicInteger換成變量i的話,那最終結(jié)果就不確定了。

打開AtomicInteger的源碼可以看到:

// setup to use Unsafe.compareAndSwapInt for updates
private static final Unsafe unsafe = Unsafe.getUnsafe();
private volatile int value;

volatile關(guān)鍵字用來保證內(nèi)存的可見性(但不能保證線程安全性),線程讀的時(shí)候直接去主內(nèi)存讀,寫操作完成的時(shí)候立即把數(shù)據(jù)刷新到主內(nèi)存當(dāng)中。

CAS簡(jiǎn)要

/**
* Atomically sets the value to the given updated value
* if the current value {@code ==} the expected value.
*
* @param expect the expected value
* @param update the new value
* @return {@code true} if successful. False return indicates that
* the actual value was not equal to the expected value.
*/
public final boolean compareAndSet(int expect, int update) {
return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

從注釋就可以看出:當(dāng)線程寫數(shù)據(jù)的時(shí)候,先對(duì)內(nèi)存中要操作的數(shù)據(jù)保留一份舊值,真正寫的時(shí)候,比較當(dāng)前的值是否和舊值相同,如果相同,則進(jìn)行寫操作。如果不同,說明在此期間值已經(jīng)被修改過,則重新嘗試。

compareAndSet使用Unsafe調(diào)用native本地方法CAS(CompareAndSet)遞增數(shù)值。

CAS利用CPU調(diào)用底層指令實(shí)現(xiàn)。

兩種方式:總線加鎖或者緩存加鎖保證原子性。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JPA默認(rèn)值設(shè)置沒有效果的解決

    JPA默認(rèn)值設(shè)置沒有效果的解決

    這篇文章主要介紹了JPA默認(rèn)值設(shè)置沒有效果的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中堆和棧的區(qū)別詳解

    Java中堆和棧的區(qū)別詳解

    這篇文章主要介紹了Java中堆和棧的區(qū)別詳解,所有的Java程序都運(yùn)行在JVM虛擬機(jī)內(nèi)部,我們這里介紹的自然是JVM(虛擬)內(nèi)存中的堆和棧,需要的朋友可以參考下
    2015-01-01
  • 關(guān)于Spring Cloud 本地屬性覆蓋的問題

    關(guān)于Spring Cloud 本地屬性覆蓋的問題

    這篇文章主要介紹了關(guān)于Spring Cloud 本地屬性覆蓋的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot利用Validation包實(shí)現(xiàn)高效參數(shù)校驗(yàn)

    SpringBoot利用Validation包實(shí)現(xiàn)高效參數(shù)校驗(yàn)

    如果不進(jìn)行校驗(yàn)就直接使用這些數(shù)據(jù),可能會(huì)導(dǎo)致各種問題,那么SpringBoot如何利用Validation包實(shí)現(xiàn)高效參數(shù)校驗(yàn)?zāi)?下面讓我們一起來探討這個(gè)重要的話題吧
    2025-04-04
  • SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程

    SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程

    這篇文章主要介紹了SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼

    Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼

    這篇文章主要介紹了Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼,代碼注釋很詳細(xì),在這里分給大家,需要的朋友可以參考下。
    2017-09-09
  • 詳解Java實(shí)踐之適配器模式

    詳解Java實(shí)踐之適配器模式

    在計(jì)算機(jī)編程中,適配器模式(有時(shí)候也稱包裝樣式或者包裝)將一個(gè)類的接口適配成用戶所期待的。一個(gè)適配允許通常因?yàn)榻涌诓患嫒荻荒茉谝黄鸸ぷ鞯念惞ぷ髟谝黄?,做法是將類自己的接口包裹在一個(gè)已存在的類中
    2021-06-06
  • Java實(shí)現(xiàn)網(wǎng)絡(luò)文件下載以及下載到指定目錄

    Java實(shí)現(xiàn)網(wǎng)絡(luò)文件下載以及下載到指定目錄

    在Spring框架中,StreamUtils和FileCopyUtils兩個(gè)工具類提供了方便的文件下載功能,它們都屬于org.springframework.util包,可以通過簡(jiǎn)單的方法調(diào)用實(shí)現(xiàn)文件流的復(fù)制和下載,這些工具類支持多種參數(shù)傳遞,涵蓋了文件下載的多種場(chǎng)景
    2024-09-09
  • 詳解SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù)

    詳解SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù)

    這篇文章主要介紹了詳解SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • 解析spring boot與ireport 整合問題

    解析spring boot與ireport 整合問題

    本文通過實(shí)例代碼給大家介紹了spring boot 與 ireport 整合問題,關(guān)于pom文件依賴的問題通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-10-10

最新評(píng)論

德格县| 嘉兴市| 且末县| 台东县| 霸州市| 涿鹿县| 宁阳县| 东乡| 额敏县| 南投市| 深州市| 兴义市| 烟台市| 清苑县| 宁波市| 当雄县| 尉犁县| 塔城市| 喀喇| 舒城县| 永靖县| 江门市| 郓城县| 河池市| 龙川县| 郓城县| 武城县| 平武县| 饶河县| 桐柏县| 崇左市| 平湖市| 虹口区| 新沂市| 息烽县| 潜江市| 河池市| 东台市| 荆门市| 元朗区| 陆河县|