ThreadForge v1.1.0 发布:让 Java 并发更接近 Go 的开发体验

正好春节放假,自驾去了陕西、河南、安徽,一路上走走停停。

白天基本在路上,晚上在酒店或者服务区休息时,抽一些时间继续打磨 ThreadForge。

一点点补了个 v1.1.0 出来。

仍然保持 ThreadForge 的目标:
让 Java 能写出更简单、更可推理、更可观测的并发代码。

这次版本,重点补齐了并发开发里几个还算常见的能力。

v1.1.0 核心更新

  1. Retry Policy(失败重试)

    支持 scope 级默认重试,也支持任务级覆盖,不再到处手写 while/try-catch 重试模板。

  2. Per-Task Timeout(任务级超时)

    除了 scope 的 deadline 外,任务本身可设置独立超时,慢任务可快速失败,不拖全局节奏。

  3. Context Propagation(上下文传播)

    支持平台线程与虚拟线程的上下文自动捕获与恢复,覆盖提交任务、调度任务和嵌套提交场景。

  4. OpenTelemetry 集成
    withOpenTelemetry(...) 一行开启任务生命周期追踪,便于链路排障与性能分析。

  5. Task Priority(任务优先级)

    引入优先级调度(高/中/低),关键任务可以更快执行。

示例代码

java 复制代码
import io.threadforge.*;

import java.time.Duration;

public class Demo {
    public static void main(String[] args) {
        Context.put("traceId", "req-20260219");

        try (ThreadScope scope = ThreadScope.open()
            .withScheduler(Scheduler.priority(8))
            .withRetryPolicy(RetryPolicy.fixedDelay(3, Duration.ofMillis(100)))
            .withOpenTelemetry()
            .withFailurePolicy(FailurePolicy.SUPERVISOR)
            .withDeadline(Duration.ofSeconds(3))) {

            Task<String> critical = scope.submit(
                "critical-task",
                () -> remoteCall("A"),
                TaskPriority.HIGH,
                RetryPolicy.attempts(2),
                Duration.ofMillis(500)
            );

            Task<String> normal = scope.submit(
                "normal-task",
                () -> remoteCall("B"),
                TaskPriority.NORMAL,
                Duration.ofSeconds(1)
            );

            Outcome outcome = scope.await(critical, normal);
            System.out.println(outcome);
        }
    }

    private static String remoteCall(String name) {
        return "ok-" + name + "-" + Context.get("traceId");
    }
}

这段代码里同时覆盖了:

重试、任务级超时、上下文传播、优先级调度、可观测追踪。

能明显看出来,这次更新,把额外的几个核心痛点做了系统性的收敛:

  1. 比方说重试、超时、优先级等逻辑,不必再散落在业务里。
  2. 让开发从关注线程调度细节,回到关注任务目标上。
  3. 让任务的生命周期天然可接入 OTel,降低排障成本。

升级方式

Maven:

xml 复制代码
<dependency>
    <groupId>pub.lighting</groupId>
    <artifactId>threadforge-core</artifactId>
    <version>1.1.0</version>
</dependency>

Gradle:

gradle 复制代码
implementation("pub.lighting:threadforge-core:1.1.0")

更新日志与仓库

  1. 仓库:github.com/wuuJiawei/T...
  2. 更新日志:github.com/wuuJiawei/T...
  3. Maven Central:pub.lighting:threadforge-core:1.1.0

如果你也在做 Java 并发治理,并希望降低团队心智负担,欢迎试用 v1.1.0,也欢迎反馈真实业务场景。

相关推荐
014.2 小时前
2025最新jenkins保姆级教程!!!
java·运维·spring boot·spring·jenkins
浣熊8882 小时前
天机学堂虚拟机静态ip无法使用(重启后ip:192.168.150.101无法使用连接Mobaxterm数据库等等,或者无法使用修改之后的Hosts域名去访问nacos,jenkins)
java·微服务·虚拟机·天机学堂·重启之后静态ip用不了
PineappleCoder2 小时前
告别“幻影坦克”:手把手教你丝滑规避布局抖动,让页面渲染快如闪电!
前端·性能优化
心 -2 小时前
java八股文IOC
java
I_LPL4 小时前
day34 代码随想录算法训练营 动态规划专题2
java·算法·动态规划·hot100·求职面试
亓才孓4 小时前
【MyBatis Exception】Public Key Retrieval is not allowed
java·数据库·spring boot·mybatis
J_liaty4 小时前
Java设计模式全解析:23种模式的理论与实践指南
java·设计模式
Desirediscipline5 小时前
cerr << 是C++中用于输出错误信息的标准用法
java·前端·c++·算法
Demon_Hao5 小时前
JAVA快速对接三方支付通道标准模版
java·开发语言