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

Java中ScopeValue的使用小結(jié)

 更新時間:2025年12月14日 10:29:22   作者:有夢想的攻城獅  
Java21引入的ScopedValue是一種作用域內(nèi)共享不可變數(shù)據(jù)的預(yù)覽API,本文就來詳細(xì)介紹一下Java中ScopeValue的使用小結(jié),感興趣的可以了解一下

一、Java ScopedValue(作用域值)詳解

1. 定義與背景

ScopedValue 是 Java 21 引入的預(yù)覽 API(JEP 429),用于在特定作用域內(nèi)安全共享不可變數(shù)據(jù)。它旨在解決傳統(tǒng) ThreadLocal 在虛擬線程(Virtual Thread)和高并發(fā)場景中的局限性,如內(nèi)存泄漏、生命周期管理復(fù)雜等問題。

2. 核心特性

  • 作用域綁定
    值僅在代碼塊或方法調(diào)用棧中有效,超出作用域后自動失效,避免手動清理。

  • 不可變性
    一旦綁定,值不可修改,確保線程安全,防止并發(fā)問題。

  • 高效性
    訪問開銷約 3ns/次,遠(yuǎn)低于 ThreadLocal15ns/次,適合高并發(fā)場景。

  • 虛擬線程友好
    專為虛擬線程設(shè)計,避免 ThreadLocal 在虛擬線程中的性能問題。

3. 使用方法

(1) 創(chuàng)建 ScopedValue

import java.lang.ScopedValue;

public class ScopedValueExample {
    // 定義一個靜態(tài)最終的 ScopedValue 對象
    static final ScopedValue<String> USER = ScopedValue.newInstance();
}

(2) 綁定值并執(zhí)行作用域

ScopedValue.where(USER, "Alice").run(() -> {
    System.out.println("Current User: " + USER.get()); // 輸出 "Alice"
});

(3) 超出作用域后訪問(會拋出異常)

try {
    System.out.println("Outside Scope: " + USER.get());
} catch (IllegalStateException e) {
    System.out.println("無法在作用域外訪問 ScopedValue");
}

4. 高級用法

(1) 嵌套作用域

內(nèi)層作用域可覆蓋外層值:

ScopedValue.where(USER, "Bob").run(() -> {
    System.out.println("Inner Scope: " + USER.get()); // 輸出 "Bob"
});

(2) 在虛擬線程中使用

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    for (int i = 0; i < 5; i++) {
        int id = i;
        executor.submit(() -> {
            ScopedValue.where(REQUEST_ID, "Request-" + id).run(() -> {
                System.out.println("Thread: " + Thread.currentThread() + 
                                   ", Request ID: " + REQUEST_ID.get());
            });
        });
    }
}

5. 適用場景

  • 虛擬線程中的上下文傳遞
    如用戶會話、請求 ID 等,確保每個虛擬線程獨立訪問數(shù)據(jù)。

  • 替代 ThreadLocal
    避免內(nèi)存泄漏和手動清理,例如在 Web 框架中傳遞請求級數(shù)據(jù)。

  • 高并發(fā)系統(tǒng)
    在分布式系統(tǒng)中傳遞事務(wù) ID 或跟蹤 ID,簡化日志上下文管理。

6. 與 ThreadLocal 的對比

特性ThreadLocalScopedValue
值綁定線程本身代碼塊或方法調(diào)用棧
生命周期與線程生命周期一致與作用域綁定,自動失效
可變性可變,需手動清理不可變,自動管理
性能15ns/次訪問3ns/次訪問
虛擬線程支持不支持(可能導(dǎo)致內(nèi)存泄漏)完美支持

二、總結(jié)

  • Java ScopedValue
    適用于高并發(fā)、虛擬線程場景,提供安全、高效的作用域值管理,是 ThreadLocal 的現(xiàn)代替代方案。

根據(jù)具體技術(shù)棧選擇合適的工具,Java 開發(fā)者應(yīng)優(yōu)先掌握 ScopedValue 以應(yīng)對高并發(fā)挑戰(zhàn)

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

相關(guān)文章

  • SpringSecurity之SecurityContextHolder使用解讀

    SpringSecurity之SecurityContextHolder使用解讀

    這篇文章主要介紹了SpringSecurity之SecurityContextHolder使用解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java根據(jù)URL下載文件到本地的2種方式(大型文件與小型文件)

    Java根據(jù)URL下載文件到本地的2種方式(大型文件與小型文件)

    這篇文章主要給大家介紹了關(guān)于Java根據(jù)URL下載文件到本地的2種方式,分別是大型文件與小型文件,避免內(nèi)存溢出OOM,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java多線程面試題之交替輸出問題的實現(xiàn)

    Java多線程面試題之交替輸出問題的實現(xiàn)

    本文主要介紹了Java多線程面試題之交替輸出問題的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Spring @OnApplicationEvent用法示例小結(jié)(典型用法)

    Spring @OnApplicationEvent用法示例小結(jié)(典型用法)

    這篇文章主要介紹了Spring @OnApplicationEvent用法示例小結(jié),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-06-06
  • 輕松掌握J(rèn)ava狀態(tài)模式

    輕松掌握J(rèn)ava狀態(tài)模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava狀態(tài)模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java8中的Stream?流實踐操作

    Java8中的Stream?流實踐操作

    這篇文章主要介紹了Java8中的Stream?流實踐操作,Stream?是?java8?中處理集合的抽象概念,可以執(zhí)行非常復(fù)雜的查詢、過濾和映射數(shù)據(jù)等操作,下文更多相關(guān)資料介紹,需要的朋友可以參考一下
    2022-05-05
  • 淺談Java垃圾回收機(jī)制

    淺談Java垃圾回收機(jī)制

    Java 中,程序員不需要關(guān)心所有不再使用的對象。垃圾回收機(jī)制自動銷毀這些對象。垃圾回收機(jī)制是守護(hù)線程的最佳示例,因為它始終在后臺運行。垃圾回收機(jī)制的主要目標(biāo)是通過銷毀無法訪問的對象來釋放堆內(nèi)存。下面我們就來詳細(xì)介紹吧
    2021-09-09
  • SpringBoot 自定義注解異步記錄復(fù)雜日志詳解

    SpringBoot 自定義注解異步記錄復(fù)雜日志詳解

    這篇文章主要為大家介紹了SpringBoot 自定義注解異步記錄復(fù)雜日志詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼

    java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼

    這篇文章主要介紹了java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼,首先介紹了兩種樹形菜單結(jié)構(gòu)的代碼,然后展示了轉(zhuǎn)換器實例代碼,最后分享了相關(guān)實例及結(jié)果演示,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • Java手機(jī)號碼工具類示例詳解(判斷運營商、獲取歸屬地)

    Java手機(jī)號碼工具類示例詳解(判斷運營商、獲取歸屬地)

    這篇文章主要介紹了Java手機(jī)號碼工具類示例詳解,通過手機(jī)號碼來判斷運營商獲取歸屬地,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論

萝北县| 年辖:市辖区| 应用必备| 静安区| 远安县| 文水县| 中江县| 罗田县| 霍林郭勒市| 五寨县| 内黄县| 波密县| 白沙| 庐江县| 始兴县| 阜新| 武城县| 重庆市| 垫江县| 清涧县| 南开区| 中西区| 潼南县| 廊坊市| 金坛市| 普兰店市| 龙南县| 昆山市| 巩留县| 中超| 同德县| 青龙| 富川| 金坛市| 高台县| 西吉县| 阳曲县| 新郑市| 兴文县| 瑞昌市| 白沙|