首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏用户4480853的专栏

    ThreadLocal与ScopedValue 发布于

    基本用法 ScopedValue对象用jdk.incubator.concurrent包中的ScopedValue类来表示。 使用ScopedValue的第一步是创建ScopedValue对象,通过静态方法newInstance来完成,ScopedValue对象一般声明为static final。 where方法有 3 个参数: ScopedValue 对象 ScopedValue 对象所绑定的值 Runnable或Callable对象,表示ScopedValue对象的作用域 在Runnable或 ScopedValue defines the where(ScopedValue, Object, Runnable) method to set the value of a ScopedValue ScopedValue 定义了 where(ScopedValue, Object, Runnable) 方法,这个方法在一个线程执行 runnable 的 run 方法的有限执行期间内设置 ScopedValue

    1K20编辑于 2023-10-21
  • 来自专栏码农那些事!!!

    ScopedValue才是王道?

    基本用法 ScopedValue对象用jdk.incubator.concurrent包中的ScopedValue类来表示。 使用ScopedValue的第一步是创建ScopedValue对象,通过静态方法newInstance来完成,ScopedValue对象一般声明为static final。 where方法有 3 个参数: ScopedValue 对象 ScopedValue 对象所绑定的值 Runnable或Callable对象,表示ScopedValue对象的作用域 在Runnable或 ScopedValue defines the where(ScopedValue, Object, Runnable) method to set the value of a ScopedValue ScopedValue 定义了 where(ScopedValue, Object, Runnable) 方法,这个方法在一个线程执行 runnable 的 run 方法的有限执行期间内设置 ScopedValue

    1.4K20编辑于 2023-11-20
  • 来自专栏JAVA体系

    JEP 446 解析:ScopeValue 不可变特性与动态作用域深度剖析

    2、简单使用package org.example;import java.lang.ScopedValue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ScopeValueDemo { private static final ScopedValue<String > REQUEST_ID = ScopedValue.newInstance(); public static void processRequest(String id) { System.out.println ("--- 线程: " + Thread.currentThread().getName() + " 开始处理 ---"); ScopedValue.where(REQUEST_ID, id 3、ScopedValue和ThreadLocal对比简单总结一下两者的对比:ScopedValue:值是不可变的,天然的线程安全绑定的作用域可以为动态执行范围,该范围代码执行结束会自动清除只是跨线程(

    28710编辑于 2025-11-18
  • 来自专栏用户4480853的专栏

    Structured Concurrency 发布于

    Using ScopedValue instead of ThreadLocal ScopedValue used to called ExtentValue And the second thing : ScopedValue.newInstance(). Live demo: using ScopedValue in a single thread And now, what we are going to do, it to call ScopedValue KEY.get() : "Not bound"); ScopedValue.where(KEY, "A").run(task); ScopedValue.where(KEY, "B"). ThreadLocal与ScopedValue.

    46330编辑于 2023-10-21
  • 来自专栏用户2276240的专栏(5)

    JDK 26 并发新纪元:JDK 25 LTS Scoped Values (JEP 506) 与结构化并发 (JEP 525) 的百万级虚拟线程下的上下文传递

    作用域绑定(Scope-BoundLifetime):ScopedValue的值只在其被显式绑定的代码块(及其内部启动的子任务)内可见。 展开代码语言:JavaAI代码解释//1.声明一个ScopedValue(通常是静态final的)privatestaticfinalScopedValue<String>USER_ID=ScopedValue.newInstance 3.2性能优势ScopedValues的实现经过了高度优化:低开销:读取一个ScopedValue的性能开销与读取一个final字段相当,远低于ThreadLocal的哈希表查找。 第四章:最佳实践与未来展望4.1最佳实践优先使用:在新项目中,尤其是在使用虚拟线程和结构化并发的场景下,应优先考虑使用ScopedValue来替代ThreadLocal。 声明为静态final:ScopedValue实例本身应该是无状态的,通常声明为privatestaticfinal。

    8621编辑于 2026-04-09
  • 来自专栏锤子代码

    JDK25更新了哪些特性?一文全部掌握

    来个:  private static final ScopedValue<FrameworkContext> CONTEXT                         = ScopedValue.newInstance 例如,在结构化并发中,ScopedValue 的生命周期与任务作用域对齐,确保子任务结束时自动释放资源。 2. 不可变性设计 ScopedValue 是不可变的(Immutable),一旦绑定值后无法修改,这消除了多线程环境下因共享可变状态引发的线程安全问题。 内存效率与性能优化 根据 JDK 官方测试数据,ScopedValue 在相同并发规模下相比 ThreadLocal 可节省高达 40% 的内存资源。 专为虚拟线程优化 ScopedValue 针对 Java 虚拟线程(Virtual Thread)设计,支持高效的线程本地数据管理。

    4K00编辑于 2025-07-12
  • 来自专栏Linyb极客之路

    基于虚拟线程的结构化并发

    Scoped Values API 基于 java.lang 中的一个新类 ScopedValue<T>,它表示将一个值绑定到特定作用域内的一个变量。该值只需编写一次,然后在每个作用域内不可更改。 <Socket> SOCKETSV = ScopedValue.newInstance(); void serve(ServerSocket serverSocket) throws IOException 我们的动态作用域示例展示了关键模式的实际应用: 使用static final作为作用域值的holder 在类作用域中声明 ScopedValue 实例 在方法中创建动态作用域(如 runWhere() <SecurityLevel> securitySV = ScopedValue.newInstance(); private static final ScopedValue<Integer> requestSV = ScopedValue.newInstance(); private final AtomicInteger req = new AtomicInteger(); public

    65220编辑于 2023-11-07
  • 【Java 25 LTS六大核心特性】

    作用域值(Scoped Values) 替代 ThreadLocal,提供更安全、轻量的线程内数据共享机制: final ScopedValue<String> USER = ScopedValue.newInstance (); ScopedValue.where(USER, "Alice").run(() -> System.out.println(USER.get())); 避免内存泄漏问题,生命周期严格绑定作用域

    16010编辑于 2026-01-20
  • 来自专栏码匠的流水账

    Java20的新特性

    20+36-2344, mixed mode, sharing) 从version信息可以看出是build 20+36 特性列表 JEP 429: Scoped Values (Incubator) ScopedValue ScopedValue则提供了一种不可变、不拷贝的方案,即不提供set方法,子线程不需要拷贝就可以访问父线程的变量。 具体使用如下: class Server { public final static ScopedValue<User> LOGGED_IN_USER = ScopedValue.newInstance User loggedInUser = authenticateUser(request); ScopedValue.where(LOGGED_IN_USER, loggedInUser) .run(() -> restAdapter.processRequest(request)); // ... } } 通过ScopedValue.where可以绑定ScopedValue的值

    96200编辑于 2023-03-25
  • 来自专栏Linyb极客之路

    聊一聊Java 21,虚拟线程、结构化并发和作用域值

    public class ScopedValueExample { final static ScopedValue<String> LoginUser = ScopedValue.newInstance (); public static void main(String[] args) throws InterruptedException { ScopedValue.where login() { System.out.println("user:" + LoginUser.get()); } } } 上面的示例模拟了用户登录过程,使用ScopedValue.newInstance ()声明了一个ScopedValue,使用ScopedValue.where为ScopedValue设置了一个值,并使用run方法执行接下来要做的事情,以便在run()内部随时获取ScopedValue

    2K30编辑于 2023-11-07
  • 来自专栏小牛肉带你学Java

    面试高峰季JDK24发布?赶快学点新特性之后跟面试官吹牛逼吧!震撼一下JDK1.8老兵

    被同组实习生吓一跳,他竟然知道InheritableThreadLocal和TransmittableThreadLocal 2024-11-02 于是JDK24推出了ScopedValue来解决解决虚拟线程场景下的上下文共享与内存泄漏问题 : ScopedValue<String> scopeVal = ScopedValue.newInstance(); ScopedValue.where(scopeVal, "B").run(() - 后续我会单独出一篇文章讲解ScopedValue

    42200编辑于 2025-04-01
  • 来自专栏王磊的博客

    重要:Java25正式发布(长期支持版)!

    新版写法 import java.lang.ScopedValue; public class ScopedValueExample { private static final ScopedValue <String> USER_ID = ScopedValue.newInstance(); public static void main(String[] args) throws Exception { ScopedValue.where(USER_ID, "user123").run(() -> { System.out.println("Current

    3.6K351编辑于 2025-09-17
  • 别再守着 Java 17/21 了!Java 25 凭结构化并发 + 虚拟线程,把并发性能卷到天花板

    import jdk.incubator.concurrent.ScopedValue;public class AuditCtx { static final ScopedValue<String > CORRELATION_ID = ScopedValue.newInstance(); static void handleRequest(String corrId, Runnable handler ) { ScopedValue.where(CORRELATION_ID, corrId).run(handler); } static void serviceCall()

    2K10编辑于 2025-10-29
  • 来自专栏Java项目实战

    百万并发!Java虚拟线程源码大揭秘:高并发场景实战指南,性能飙升百倍

    -Djdk.tracePinnedThreads=full -jar app.jar​​内存优化技巧​​// 避免在虚拟线程中使用大对象ThreadLocalprivate static final ScopedValue <Connection> DB_CONN = ScopedValue.newInstance();public void handleRequest() { ScopedValue.where

    51110编辑于 2025-09-19
  • Java 25 正式发布:更简洁、更高效、更现代!

    作用域值(Scoped Values)(JEP 506)替代 ThreadLocal 的新方案,跨线程共享上下文更安全:static final ScopedValue<String> USER_ID = ScopedValue.newInstance();void handle(String userId) { ScopedValue.where(USER_ID, userId).run(()

    1.1K00编辑于 2025-10-29
  • 来自专栏用户2276240的专栏(5)

    Project Loom:Java并发革命!百万级协程如何让性能飙升

    4.2作用域值:为结构化并发而生ScopedValue是为了解决上述问题而设计的。它的核心思想是不可变(Immutable)和作用域绑定(Scope-Bound)。 不可变性:一旦ScopedValue被绑定到一个值,该值在其整个生命周期内都无法被修改。作用域绑定:ScopedValue的值只在其被绑定的代码块(及其启动的子任务)内可见。 4.3使用示例展开代码语言:JavaAI代码解释//声明一个ScopedValueprivatestaticfinalScopedValue<String>USER_ID=ScopedValue.newInstance ();publicvoidhandleRequest(StringuserId){//将userId绑定到USER_ID,并在给定的作用域内执行逻辑ScopedValue.where(USER_ID,userId 替换ThreadLocal:在新项目中,优先考虑使用ScopedValue来传递请求上下文。第六章:未来展望与生态影响ProjectLoom不仅仅是一组新API,它是一场深刻的范式转移。

    13220编辑于 2026-04-07
  • 来自专栏编程我也会

    JDK 25 新特性极简总结(2025 年 9 月 16 日发布,LTS 长期支持)

    ScopedValue<User> CONTEXT = ScopedValue.newInstance(); CONTEXT.with(new User("Alice"), () -> { /* 当前线程内可用

    3.1K20编辑于 2025-11-17
  • 来自专栏码匠的流水账

    Java21的新特性

    Values (Preview) Scoped Values在JDK20的JEP 429: Scoped Values (Incubator)作为Incubator 此次在JDK21作为preview版本 ScopedValue ScopedValue则提供了一种不可变、不拷贝的方案,即不提供set方法,子线程不需要拷贝就可以访问父线程的变量。 具体使用如下: class Server { public final static ScopedValue<User> LOGGED_IN_USER = ScopedValue.newInstance User loggedInUser = authenticateUser(request); ScopedValue.where(LOGGED_IN_USER, loggedInUser) .run(() -> restAdapter.processRequest(request)); // ... } } 通过ScopedValue.where可以绑定ScopedValue

    1.1K40编辑于 2023-09-22
  • 来自专栏码匠的流水账

    Java22的新特性

    446: Scoped Values (Preview)作为preview版本JDK22作为第二次preview,具体使用如下:class Server { public final static ScopedValue <User> LOGGED_IN_USER = ScopedValue.newInstance(); private void serve(Request request) { // ... User loggedInUser = authenticateUser(request); ScopedValue.where(LOGGED_IN_USER, loggedInUser) .run(() -> restAdapter.processRequest(request)); // ... }}通过ScopedValue.where可以绑定ScopedValue的值,然后在

    37810编辑于 2024-03-25
  • 来自专栏码匠的流水账

    Java21的新特性

    Values (Preview) Scoped Values在JDK20的JEP 429: Scoped Values (Incubator)作为Incubator 此次在JDK21作为preview版本 ScopedValue ScopedValue则提供了一种不可变、不拷贝的方案,即不提供set方法,子线程不需要拷贝就可以访问父线程的变量。 具体使用如下: class Server { public final static ScopedValue<User> LOGGED_IN_USER = ScopedValue.newInstance User loggedInUser = authenticateUser(request); ScopedValue.where(LOGGED_IN_USER, loggedInUser) .run(() -> restAdapter.processRequest(request)); // ... } } 通过ScopedValue.where可以绑定ScopedValue的值

    1.4K40编辑于 2023-09-20
领券