正好春节放假,自驾去了陕西、河南、安徽,一路上走走停停。
白天基本在路上,晚上在酒店或者服务区休息时,抽一些时间继续打磨 ThreadForge。
一点点补了个 v1.1.0 出来。
仍然保持 ThreadForge 的目标:
让 Java 能写出更简单、更可推理、更可观测的并发代码。
这次版本,重点补齐了并发开发里几个还算常见的能力。
v1.1.0 核心更新
-
Retry Policy(失败重试)
支持 scope 级默认重试,也支持任务级覆盖,不再到处手写 while/try-catch 重试模板。 -
Per-Task Timeout(任务级超时)
除了 scope 的 deadline 外,任务本身可设置独立超时,慢任务可快速失败,不拖全局节奏。 -
Context Propagation(上下文传播)
支持平台线程与虚拟线程的上下文自动捕获与恢复,覆盖提交任务、调度任务和嵌套提交场景。 -
OpenTelemetry 集成
withOpenTelemetry(...)一行开启任务生命周期追踪,便于链路排障与性能分析。 -
Task Priority(任务优先级)
引入优先级调度(高/中/低),关键任务可以更快执行。
示例代码
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");
}
}
这段代码里同时覆盖了:
重试、任务级超时、上下文传播、优先级调度、可观测追踪。
能明显看出来,这次更新,把额外的几个核心痛点做了系统性的收敛:
- 比方说重试、超时、优先级等逻辑,不必再散落在业务里。
- 让开发从关注线程调度细节,回到关注任务目标上。
- 让任务的生命周期天然可接入 OTel,降低排障成本。
升级方式
Maven:
<dependency>
<groupId>pub.lighting</groupId>
<artifactId>threadforge-core</artifactId>
<version>1.1.0</version>
</dependency>
Gradle:
implementation("pub.lighting:threadforge-core:1.1.0")
更新日志与仓库
- 仓库:github.com/wuuJiawei/T…
- 更新日志:github.com/wuuJiawei/T…
- Maven Central:
pub.lighting:threadforge-core:1.1.0
如果你也在做 Java 并发治理,并希望降低团队心智负担,欢迎试用 v1.1.0,也欢迎反馈真实业务场景。