0

我有一个 Vaadin 应用程序,我正在实现一些异步后台处理。据我所知,来自客户端的所有请求都由 Tomcat 线程池中的一个线程处理,在处理请求后,响应(更新的应用程序状态)将返回给客户端并呈现。

因为我有一些我想在后台执行的任务,我需要在主 HTTP 线程中显示一个“正在加载...”标签,在它显示之后,我需要启动一个执行任务的后台线程,当它完成时,应用程序的状态被推送到客户端(使用 ICEPush 插件)。

问题是在我看来,有时后台线程在主 HTTP 线程返回响应给客户端之前完成,因此没有显示“正在加载...”标签,有时应用程序的状态没有在客户端上完全更新,因为那个。因此,我需要在主 HTTP 线程返回响应后启动后台线程。

有没有办法做到这一点?还是我对这种方法完全错误?

谢谢!

4

1 回答 1

0

据我所知,在线程中更新 UI 必须与锁定机制一起完成。这是一个例子:

class Calculation implements Runnable {

    private long result = 0;

    private final Label label;

    public Calculation(Label label) {
        this.label = label;
    }

    @Override
    public void run() {
           // calculate or fetch the result (here is the time consuming operation) 
           getSession().getLockInstance().lock();
           try {
               // inform UI about result
               label.setValue("Result is: " + result);
           } finally {
               getSession().getLockInstance().unlock();
           }
     }
}
于 2013-02-02T11:28:40.733 回答