如何报告后台任务的进度?

Aja*_*jay 5 java eclipse-rcp swingworker executorservice

我有一个长时间运行的任务,正在 ExecutorService 线程池的后台执行。就该任务返回进度或中间结果而言,有哪些最佳实践?有没有提供此功能的库?

编辑:为了澄清,我正在谈论向其他代码报告进度,而不是向用户报告进度。

通常我会使用 SwingWorker,但我正在使用 Grails 应用程序的 Java/Groovy 后端,并且我不确定它在无头服务器环境中的表现如何,因为它具有 EDT 关系。

另一个例子是 Eclipse RCP 中的 Jobs 框架,但我需要一些与 UI 无关的东西。

edw*_*att 3

嘿,您可以尝试实现观察者模式,并让感兴趣的各方订阅工作线程(java.util.Observable 或类似的扩展)或管理观察者的另一个类。

您可以使用 java.util.Observer 和 java.util.Observable 或自己推出。

实现观察者模式的一些接口的简单示例:

public interface ObservableSubject<T extends SubjectObserver, V> {

   void registerObserver(T observer);

   void removeObserver(T observer);

   void notifyObservers(V notificationPayload); 

}


public interface SubjectObserver<T> {

   void handleNotification(T notificationPayload);
}
Run Code Online (Sandbox Code Playgroud)

更多信息:维基百科上的观察者模式