根据目前在 OpenJDK 社区中孵化的计划,多线程编程对于 Java 开发人员来说可能会变得更容易。
结构化并提出建议 将引入一个库,该库将在不同线程中运行的多个任务视为一个工作单元。根据提案,新库将简化错误处理和取消,提高可靠性并增强可观察性。该计划的目标包括提高多线程代码的可靠性和可观察性,并促进并发编程风格,以消除因取消和关闭而引起的常见风险,例如线程泄漏和取消延迟。在这一点上,结构化并发建议并不针对特定版本的 Java。
该提案指出,结构化并发是一种多线程编程方法,它保留了开发人员使用单线程代码时的可读性和可维护性。它遵循的原则是,如果一个任务拆分成并发的子任务,它们都会返回同一个地方:任务的代码块。通过返回同一个代码块,并发子任务的生命周期被限制在一个句法块中。因为兄弟子任务被限制在同一个块中,所以它们可以作为一个单元进行推理和管理。子任务代表一个任务——封闭块中的代码——等待结果并监控它们是否失败。与单线程代码的结构化编程技术一样,多线程结构化并发的强大功能来自两个想法:通过代码块为执行流定义明确的入口点和出口点,以及将操作的生命周期严格嵌套在一种反映代码中嵌套的方式。
在运行时,结构化并发构建了一个树形的任务层次结构,同级子任务由同一个父任务拥有。该树是单个线程调用堆栈的并发对应物。
结构化并发匹配虚拟线程,是JDK提供的轻量级线程实现。计划于今年 9 月为 Java 19 提供虚拟线程预览。许多虚拟线程共享同一个操作系统线程,允许大量的虚拟线程。这些可以表示一个并发的行为单元,甚至是 I/O 行为。因此,服务器应用程序可以使用结构化并发来同时处理数千或数百万个传入请求。
本质上,虚拟线程提供了丰富的线程和结构化并发确保它们正确协调。在 JDK 中拥有用于结构化并发的库为服务器端开发人员提供了可维护性和可靠性。
该提议不涉及替换 java.util.concurrent
中的并发构造或为 Java 提供明确的结构化并发 API。该提案也不打算添加在线程之间共享数据流的机制,尽管这可能会在未来得到解决。根据当前提案,现有的线程中断机制不会被新的线程取消机制所取代,但这也可能在未来发生。
地址:https://www.cundage.com/article/3661310-java-concurrency-could-be-about-to-get-easier.html