正好春节放假,自驾去了陕西、河南、安徽,一路上走走停停。
白天基本在路上,晚上在酒店或者服务区休息时,抽一些时间继续打磨 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(任务优先级)
引入优先级调度(高/中/低),关键任务可以更快执行。
示例代码
1import io.threadforge.*; 2 3import java.time.Duration; 4 5public class Demo { 6 public static void main(String[] args) { 7 Context.put("traceId", "req-20260219"); 8 9 try (ThreadScope scope = ThreadScope.open() 10 .withScheduler(Scheduler.priority(8)) 11 .withRetryPolicy(RetryPolicy.fixedDelay(3, Duration.ofMillis(100))) 12 .withOpenTelemetry() 13 .withFailurePolicy(FailurePolicy.SUPERVISOR) 14 .withDeadline(Duration.ofSeconds(3))) { 15 16 Task<String> critical = scope.submit( 17 "critical-task", 18 () -> remoteCall("A"), 19 TaskPriority.HIGH, 20 RetryPolicy.attempts(2), 21 Duration.ofMillis(500) 22 ); 23 24 Task<String> normal = scope.submit( 25 "normal-task", 26 () -> remoteCall("B"), 27 TaskPriority.NORMAL, 28 Duration.ofSeconds(1) 29 ); 30 31 Outcome outcome = scope.await(critical, normal); 32 System.out.println(outcome); 33 } 34 } 35 36 private static String remoteCall(String name) { 37 return "ok-" + name + "-" + Context.get("traceId"); 38 } 39} 40
这段代码里同时覆盖了:
重试、任务级超时、上下文传播、优先级调度、可观测追踪。
能明显看出来,这次更新,把额外的几个核心痛点做了系统性的收敛:
- 比方说重试、超时、优先级等逻辑,不必再散落在业务里。
- 让开发从关注线程调度细节,回到关注任务目标上。
- 让任务的生命周期天然可接入 OTel,降低排障成本。
升级方式
Maven:
1<dependency> 2 <groupId>pub.lighting</groupId> 3 <artifactId>threadforge-core</artifactId> 4 <version>1.1.0</version> 5</dependency> 6
Gradle:
1implementation("pub.lighting:threadforge-core:1.1.0") 2
更新日志与仓库
- 仓库:github.com/wuuJiawei/T…
- 更新日志:github.com/wuuJiawei/T…
- Maven Central:
pub.lighting:threadforge-core:1.1.0
如果你也在做 Java 并发治理,并希望降低团队心智负担,欢迎试用 v1.1.0,也欢迎反馈真实业务场景。
