Java 20新特性:Scoped Values 作用域值(孵化器)

2023-11-16

以下内容由New Bing自动生成,仅介绍了Scoped Values的部分内容,如果需要详细的Scoped Values信息,可以查阅官方JEP 429文档。

Java JEP 429是 JDK 20 中引入的唯一一个新特性,目前还处于孵化器 API 的状态。它的目的是通过在线程内部和线程之间共享不可变数据,来简化线程管理。作用域值可以防止远程代码修改变量,因此可以可靠地将数据传递给同一方法中的被调用者 。

什么是作用域值?

作用域值是一种新的语言结构,它允许声明一个只能在当前范围(extent)内访问的变量。一个范围是一个代码块或一个方法调用栈,它可以包含多个线程。作用域值只能被当前范围内的代码读取,不能被其他范围内的代码读取或修改。因此,作用域值是不可变的,并且可以安全地在线程之间共享。

如何使用作用域值?

要使用作用域值,需要引入java.lang.Scope类和java.lang.ScopedValue接口。Scope类提供了创建和管理范围的静态方法,ScopedValue接口定义了表示作用域值的类型。下面是一个简单的示例:

import java.lang.Scope;
import java.lang.ScopedValue;

public class ScopeDemo {
	public static void main(String[] args) {
		// 创建一个新的范围
		Scope scope = Scope.create();
		// 在范围内声明一个作用域值
		ScopedValue<String> name = scope.declare("name", "Alice");
		// 在当前线程中访问作用域值
		System.out.println(name.get()); // Alice
		// 在另一个线程中访问作用域值
		new Thread(() -> {
			System.out.println(name.get()); // Alice
		}).start();
		// 在其他范围中无法访问作用域值
		Scope otherScope = Scope.create();
		otherScope.run(() -> {
			System.out.println(name.get()); // 抛出异常
		});
	}
}

目前,Java JEP 429 还处于孵化器阶段,并没有被正式纳入 Java 语言规范。要使用它,需要在编译和运行时指定 -XDallowScopeValues=true -XX:+EnableValhalla -XX:+EnableScopedValues -XX:+EnableLoom -Xverify:none 这些选项 。未来可能会有更多改进和优化,在正式发布之前,请谨慎使用。

为什么要使用作用域值?

使用作用域值有以下几个优势:

  • 提高数据安全性:由于作用域值只能在当前范围内访问,因此可以避免数据泄露或被恶意修改。
  • 提高数据效率:由于作用域值是不可变的,并且可以在线程之间共享,因此可以减少数据复制或同步的开销。
  • 提高代码清晰度:由于作用域值只能在当前范围内访问,因此可以减少参数传递或全局变量的使用。

总结

Java JEP 429是一个正在孵化的新特性,它提供了一种在线程内部和线程之间共享不可变数据的方式。本文介绍了作用域值的概念、使用方法和优势。如果你对这个特性感兴趣,你可以下载JDK 20并尝试使用它 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 20新特性:Scoped Values 作用域值(孵化器) 的相关文章

  • 使用比较器对对象进行排序给出空指针

    我正在尝试对包含 3 张卡的 ArrayList 进行排序 我正在用比较器来做这件事 这是否太过分了 Card getRank 返回 2 到 14 之间的整数 我完全不知道哪里出了问题 我之前已经成功完成了这个 并与我的其他代码进行了比较
  • java.sql.SQLException: ORA-01005: 给定的密码为空;登录被拒绝

    我在尝试连接到数据库时遇到以下异常 java sql SQLException ORA 01005 null password given logon denied at oracle jdbc driver T4CTTIoer proce
  • RSA 加密-解密:BadPaddingException:数据必须以零开头

    对于一个被问了很多次的问题 我很抱歉向您询问您的技能 我有一个关于 RSA 加密的问题 我已经检查过有关此问题的其他主题 但没有找到任何有用的答案 我希望你能帮助我 我想读取一个文件 加密其内容 然后解密它并将这些解密的字节放入一个新文件中
  • GSON:自定义对象反序列化

    好吧 我编辑了这个问题 因为它不够清楚 Edit 2 更新了 JSON 文件 我在 Android 应用程序中使用 GSON 我需要解析来自服务器的 JSON 文件 而且有点太复杂了 我不想让我的对象结构太重 所以我想简化内容 所以我的对象
  • @NotNull.List 的目的

    当我查看标准时限制条件 http docs oracle com javaee 6 api javax validation constraints package summary html在 Bean Validation API JSR
  • 从继承的受保护 Java 字段创建公共访问器

    我怎样才能完成以下工作 class Foo extends javax swing undo UndoManager increase visibility works for method override def editToBeUnd
  • 为什么 MetaSpace 大小是已用 MetaSpace 的两倍?

    我写了一个程序来模拟MetaSpace OOM 但我发现MetaSpace Size几乎总是两倍大Used MetaSpace Why 我用标志运行我的程序 XX MaxMetaspaceSize 50m 程序抛出OOM时Used Meta
  • 文件保存在文件系统中 VS 保存在数据库中

    我正在设计一个 servlet 或 Struts2 中的操作 用于文件 图像 文档等 下载 但我想知道哪种更好的方法可以将文件保留在文件系统和数据库中 只需保留文件的路径或将文件保留在数据库中 如 BLOB 我知道当我查询数据库时 哪里的
  • Java - 同步方法导致程序大幅减慢

    我正在尝试了解线程和同步 我做了这个测试程序 public class Test static List
  • 比较和删除列表和数组java中不存在的元素

    我有一个String数组和一List
  • 如何在 Spring Boot 中创建 Apache POI Excel 视图配置

    当我想使用 Spring Boot Web 将数据导出到 Excel 时遇到问题 我使用 Thymeleaf 作为模板引擎 由 Spring Boot 自动配置 但是当我在附加配置中添加 XmlViewResolver 时 由 XmlVie
  • JSP 作为电子邮件模板

    有没有办法发送 MIME 电子邮件 其中电子邮件正文源自 JSP 我需要使用 Javamail 发送一封电子邮件 其中包含一个表格 我认为如果我可以使用 JSP 来完成所有格式设置和布局 将会很方便 在这个线程中 Java 电子邮件模板的建
  • 如何获取队列中的第 n 个项目?

    我的应用程序中有许多队列和优先级队列 我想轻松访问这些队列中的第 n 个项目 但没有看到使用 API 实现此目的的简单方法 我想我可以创建一个Iterator并迭代到第 n 个元素或使用toArray index 但似乎应该有一个更简单的方
  • 在openjdk:7-jre-alpine docker上如何安装python 3.6

    直到大约一周前 我才在 java 图像上成功使用 python 3 6 脚本 如下所示 FROM openjdk 7 jre alpine RUN apk update apk upgrade apk add no cache bash a
  • 有时 Properties.load() 会跳过行

    在以下情况下 Properties load 会跳过 InputStream 的第二行 这是 Java 的错误还是正常行为 public class PropTest public static void main String args
  • 为什么 HttpServletRequest 输入流为空?

    我有这段代码 我从请求输入流读取输入并使用 JacksonMapper 转换为 POJO 它在具有 guice 支持的 jetty 7 容器中运行 Override protected void doPost HttpServletRequ
  • Android应用程序中的模式输入

    我想知道是否有其他替代方案可以替代 Android 上平庸的 EditText 密码输入 是否有 API 或开源代码可以集成到我的应用程序中 类似于锁屏图案解锁 Intent 可能会返回哈希值 数字 字符串或代表用户输入的模式的任何内容 我
  • 如何正确使用Google Calendar API Events.Insert命令?

    所以我一直使用REST方法来调用Google的API 我需要将事件插入到我拥有 ID 的特定日历中 这是我发送的 POST 请求 地址 https www googleapis com calendar v3 calendars https
  • javafx中的stackpane和root有什么区别?

    我正在练习javafx做饼图 以下是开发饼图的代码 如果我这样做Group并与StackPane 我发现输出没有区别 我已经评论了组部分 只是徘徊两者之间的区别 import javafx application Application i
  • jvm 如何以及何时何地更改 Linux 的最大打开文件值?

    在linux中 每个登录用户的每个进程的最大打开文件数有限制 如下所示 ulimit n 1024 当我学习java nio时 我想检查这个值 因为channel在Linux中也是一个文件 所以我编写了一个客户端代码来不断创建socketC

随机推荐

  • 关系型数据库连接表的几种方式

    一 SQL 左外连接 右外连接 全连接 内连接 内连接 a表 id name 1 张3 2 李四 3 王武 b表 id job parent id 1 23 1 2 34 2 3 34 4 a id同parent id 存在关系 内连接 i
  • 设置最小值_allegro软件的绝对传输延迟是什么,绝对传输延迟应该怎么设置呢...

    标题 allegro软件的绝对传输延迟是什么 绝对传输延迟应该怎么设置呢 我们在用allegro进行PCB设计完成以后 都需要对一组传输的总线进行时序等长 在做时序等长的时候 分为绝对传输延迟与相对传输延迟 绝对传输延迟 顾名思义 信号传输
  • 洛谷 P1026 [NOIP2001 提高组] 统计单词个数

    题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串 该字串以每行 20 个字母的方式输入 且保证每行一定为 20 个 要求将此字母串分成 k 份 且每份中包含的单词个数加起来总数最大 每份中包含的单词可以部分重叠 当选用一个
  • 从图片中完整切除圆形物体 opencv+python

    面临一个任务就是要图片中的圆形物体切出来 然后做异常点检测 就是看那些圆形物体是异常点 因为异常点检测的方法还在摸索 现在就先把从图片中把圆形物体完整切出的方法写出来 1 首先图片是这样的 圆形物体非常多 2 接下来就是代码部分 impor
  • Pycharm中的常用快捷方式

    最重要的快捷键 ctrl shift A 万能命令行 shift两次 查看资源文件 新建工程第一步操作 module设置把空包分层去掉 compact empty middle package 设置当前的工程是utf 8 设置的Editor
  • 关于OCA,OCP,OCM认证的的区别

    可能大家知道OCA OCP OCM的关系是一个比一个难考 一个比一个含金量高 但是你知道具体的考试科目 考试方式 就业形势区别吗 不知道的话这篇通俗易懂的文章会让你一目了然 区别一 含金量 OCA 数据库专业人员踏上Oracle数据库认证之
  • MySQL数据库入门超级详细教程

    文章目录 MySQL 1 数据库软件安装 2 为什么要用数据库 3 什么是数据库 4 数据库管理系统 DBMS 5 MySQL 介绍 6 SQL 6 1 SQL 语句概述 6 2 SQL 基本操作 7 表结构操作 7 1 创建数据表 7 2
  • Windows10系统下彻底删除卸载MySQL

    本文介绍 在Windows10系统下 如何彻底删除卸载MySQL 1 停止MySQL服务 开始 所有应用 Windows管理工具 服务 将MySQL服务停止 2 卸载mysql server 控制面板 所有控制面板项 程序和功能 将mysq
  • vscode+Electron环境搭建 helloword

    0 Electron是什么简介 Electron 简单来说就是一个基于Chrome Nodejs的容器 可以用纯前端的方式实现跨平台的桌面应用开发 代码由js css html构成 它支持把整个项目编译成exe 由于它支持Nodejs 所以
  • sqli-labs(22)

    接下里我们进入第二二关 好像和第21关一样 cookie的base64加密注入 闭合变成了双引号而已 0X01 构造语句进行尝试 union select 1 2 3 IiB1bmlvbiBzZWxlY3QgMSwyLDMj 嘿嘿 好像成功
  • 我的世界超富的java种子_《我的世界》最富有的四个种子,第一名有4个村庄,这科学吗?...

    原标题 我的世界 最富有的四个种子 第一名有4个村庄 这科学吗 投胎是一项技术活 这个定律在Minecraft同样适用 好的出生点意味着好的开始 但不是人人都有这种运气 没关系 有种子嘛 Seed 382686119982684279 出生
  • Unity 改变鼠标指针的方法

    在网上查的帖子 先看一下 Texture2D ClickedCursorImg 把鼠标指针改为ClickedCursorImg Cursor SetCursor ClickedCursorImg Vector2 zero CursorMod
  • Api Savior 文档生成 idea 插件进阶教程

    原文地址见 Github Wiki Spring MVC 注解支持表 注解 注解字段 是否支持 作用描述 备注 RequestMapping value path 支持 绑定一个或多个 url RequestMapping method 支
  • JetBrains系列--工具使用方法

    JetBrains系列 工具使用方法 介绍 常用IDE 2 1 IDEA 2 2 pycharm 2 3 goland 2 4 clion 3 快捷方式 4 说明 JetBrains系列 工具使用方法 介绍 JetBrains 系列IDE是
  • 如何在Vue项目中给路由跳转加上进度条

    在平常浏览网页时 我们会注意到在有的网站中 当点击页面中的链接进行路由跳转时 页面顶部会有一个进度条 用来标示页面跳转的进度 如下图所示 虽然实际用处不大 但是对用户来说 有个进度条会大大减轻用户的等待压力 提升用户体验 本篇文章就来教你如
  • 程序员口中常说的API是什么意思?什么是API?

    什么是API 我的回答 API 应用程序编程接口 一般来说 这是一套明确定义的各种软件组件之间的通信方法 什么是API 我们不妨用一个小故事展示出来 研发人员A开发了软件A 研发人员B正在研发软件B 有一天 研发人员B想要调用软件A的部分功
  • Xilinx Vivado .coe文件生成

    一 COE格式文件生成 由于Quartus ii软件ROM用的是mif格式的文件 且可以用软件Guagle wave生成正弦波 三角波 锯齿波 我们可以利用这个软件先生成数据 然后再将其转化为符合COE格式的文件 具体请参考以下步骤 1 先
  • JavaWeb中如何将JSP文件的编码格式修改为UTF-8

    目录 一 修改原因 二 修改步骤 在使用eclipse学习jsp时 很多默认的编码都是ISO 8859 15 而我们需要使用的是utf 8编码 我们第一个接触改变jsp编码的方式可能都是在需要修改的jsp中修改 如下 将charset与pa
  • python线程与进程概述_1.24

    多进程与多线程 进程 Process 是计算机中的程序关于某数据集合上的一次运行活动 是系统进行资源分配和调度的基本单位 是操作系统结构的基础 线程 Thread 有时被称为轻量级进程 Lightweight Process LWP 是程序
  • Java 20新特性:Scoped Values 作用域值(孵化器)

    以下内容由New Bing自动生成 仅介绍了Scoped Values的部分内容 如果需要详细的Scoped Values信息 可以查阅官方JEP 429文档 Java JEP 429是 JDK 20 中引入的唯一一个新特性 目前还处于孵化