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

Java中并發(fā)下的ThreadlocalRandom的實現(xiàn)

 更新時間:2026年01月13日 09:19:16   作者:ZNineSun  
本文介紹了Java1.8中的ThreadLocalRandom類,它在并發(fā)環(huán)境下比Random類有更好的性能,下面就來詳細(xì)的介紹一下如何使用,感興趣的可以了解一下

1. 背景

在看同事寫的代碼的時候發(fā)現(xiàn)代碼里有很多像:

如果我們想要生成一個隨機數(shù),通常會使用Random類。但是在并發(fā)情況下Random生成隨機數(shù)的性能并不是很理想,今天給大家介紹一下JUC包中的用于生成隨機數(shù)的類–ThreadLocalRandom.(本文基于JDK1.8)

當(dāng)然Random隨機數(shù)也可以保證線程的安全,但是Random隨機數(shù)生成是和種子seed有關(guān),而為了保證線程安全性,Random通過CAS機制來保證線程安全性。

從next()方法中我們可以發(fā)現(xiàn)seed是通過自旋鎖和CAS來進(jìn)行修改值的。如果在高并發(fā)的場景下,那么可能會導(dǎo)致CAS不斷失敗,從而導(dǎo)致不斷自旋,這樣就可能會導(dǎo)致服務(wù)器CPU過高。我們可以看一下next的實現(xiàn):

    protected int next(int bits) {
        long oldseed, nextseed;
        AtomicLong seed = this.seed;
        do {
            oldseed = seed.get();
            nextseed = (oldseed * multiplier + addend) & mask;
        } while (!seed.compareAndSet(oldseed, nextseed));
        return (int)(nextseed >>> (48 - bits));
    }

2.為什么要用ThreadLocalRandom

ThreadLocalRandom是ThreadLocal和Random類的組合,它與當(dāng)前線程隔離。因此,它通過簡單地避免對Random對象的任何并發(fā)訪問,在多線程環(huán)境中實現(xiàn)了更好的性能。

一個線程獲得的隨機數(shù)不受另一個線程的影響,而java.util.Random全局提供隨機數(shù)。

此外,與Random 不同,ThreadLocalRandom不支持顯式設(shè)置種子。相反,它會覆蓋從Random繼承的setSeed(long seed)方法,以便在調(diào)用時始終拋出UnsupportedOperationException。

現(xiàn)在讓我們看一下生成隨機int,long和double值的一些方法。

根據(jù)Oracle文檔,我們只需要調(diào)用ThreadLocalRandom.current()方法,它將返回當(dāng)前線程的ThreadLocalRandom實例。然后,我們可以通過調(diào)用類的可用實例方法來生成隨機值。

int unboundedRandomValue = ThreadLocalRandom.current().nextInt());

上面的代碼可以生成一個沒有任何邊界的隨機int值

int boundedRandomValue = ThreadLocalRandom.current().nextInt(0, 100);

這是一個生成0到100之間的隨機int值的示例,值得注意的是:包含下限0,不包含上限100

同樣我們也可以與上面示例中所示類似的方式調(diào)用nextLong()和nextDouble()方法來生成long和double的隨機值。

Java 8還添加了nextGaussian()方法來生成下一個正態(tài)分布的值,其值與生成器序列的值相差 0.0和1.0。

與Random類一樣,我們也可以使用doubles(),ints()和longs()方法生成隨機值流。

到此這篇關(guān)于Java中并發(fā)下的ThreadlocalRandom的文章就介紹到這了,更多相關(guān)Java 并發(fā)ThreadlocalRandom內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中static的用法及注意點

    java中static的用法及注意點

    在本篇文章里小編給大家整理的是一篇關(guān)于java中static的用法及注意點,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Java使用TCP實現(xiàn)在線聊天的示例代碼

    Java使用TCP實現(xiàn)在線聊天的示例代碼

    這篇文章主要介紹了Java使用TCP實現(xiàn)在線聊天的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 基于mybatis-plus 時間字段比較

    基于mybatis-plus 時間字段比較

    這篇文章主要介紹了mybatis-plus 時間字段的比較,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot項目中自定義線程池的方法步驟

    SpringBoot項目中自定義線程池的方法步驟

    在Spring Boot項目中,合理配置和使用線程池對于提升應(yīng)用程序性能、優(yōu)化資源利用和保證系統(tǒng)穩(wěn)定性至關(guān)重要,本文將詳細(xì)介紹如何在Spring Boot中自定義線程池,包括配置方式、參數(shù)調(diào)優(yōu)、使用方法和最佳實踐,需要的朋友可以參考下
    2025-09-09
  • Java開發(fā)者必備10大數(shù)據(jù)工具和框架

    Java開發(fā)者必備10大數(shù)據(jù)工具和框架

    這篇文章主要為大家詳細(xì)介紹了Java開發(fā)者必備10大數(shù)據(jù)工具和框架,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • mybatis模糊查詢、分頁和別名配置的方法

    mybatis模糊查詢、分頁和別名配置的方法

    這篇文章主要介紹了mybatis模糊查詢、分頁和別名配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 如何利用JAVA正則表達(dá)式輕松替換JSON中的大字段

    如何利用JAVA正則表達(dá)式輕松替換JSON中的大字段

    這篇文章主要給大家介紹了關(guān)于如何利用JAVA正則表達(dá)式輕松替換JSON中大字段的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java中如何正確定義字符串

    Java中如何正確定義字符串

    這篇文章主要給大家介紹了關(guān)于Java中如何正確定義字符串的相關(guān)資料,在Java中定義一個字符串最簡單的方法是用雙引號把它包圍起來,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • JAVA JNI原理詳細(xì)介紹及簡單實例代碼

    JAVA JNI原理詳細(xì)介紹及簡單實例代碼

    這篇文章主要介紹了JAVA JNI原理的相關(guān)資料,這里提供簡單實例代碼,需要的朋友可以參考下
    2016-12-12
  • 如何基于java向mysql數(shù)據(jù)庫中存取圖片

    如何基于java向mysql數(shù)據(jù)庫中存取圖片

    這篇文章主要介紹了如何基于java向mysql數(shù)據(jù)庫中存取圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

陈巴尔虎旗| 卢龙县| 万盛区| 岢岚县| 海淀区| 涞源县| 中西区| 绥芬河市| 延川县| 堆龙德庆县| 富民县| 元氏县| 昌图县| 延长县| 遂溪县| 天祝| 金沙县| 枣强县| 康定县| 嘉义市| 富阳市| 安义县| 河东区| 铜川市| 洪江市| 安阳县| 保德县| 磐石市| 平山县| 舒兰市| 乌鲁木齐市| 姚安县| 南平市| 肃宁县| 乾安县| 中西区| 成都市| 益阳市| 衡阳县| 攀枝花市| 准格尔旗|