Asynchronous Updates
Environment.runLater()
API 提供了一种机制,可以安全地从 webforJ 应用程序的后台线程更新 UI。这个实验性特性允许异步操作,同时保证 UI 修改的线程安全性。
实验性 API
该 API 自 25.02 版本开始标记为实验性,未来版本可能会有所更改。API 的签名、行为和性能特征可能会被修改。
理解线程模型
webforJ 强制执行严格的线程模型,所有 UI 操作必须在 Environment
线程上进行。此限制存在原因如下:
- webforJ API 限制:底层的 webforJ API 绑定到创建会话的线程
- 组件线程亲和性:UI 组件维护的状态不是线程安全的
- 事件调度:所有 UI 事件都在单个线程上顺序处理
这种单线程模型防止了竞争条件,并保持所有 UI 组件的状态一致性,但在与异步、长期计算任务集成时创建了挑战。
RunLater
API
Environment.runLater()
API 提供了两种方法来调度 UI 更新:
Environment.java
// 调度一个没有返回值的任务
public static PendingResult<Void> runLater(Runnable task)
// 调度一个返回值的任务
public static <T> PendingResult<T> runLater(Supplier<T> supplier)
这两种方法返回一个 PendingResult
,它跟踪任务的完成情况并提供访问结果或发生的任何异常。
线程上下文继承
自动上下文继承是 Environment.runLater()
的一个关键特性。当在 Environment
中运行的线程创建子线程时,这些子线程会自动继承使用 runLater()
的能力。