簡體   English   中英

在HTTP請求服務並發送回客戶端后,如何啟動后台線程?

[英]How to start a background thread after the HTTP request is served and sent back to the client?

我有一個Vaadin應用程序,並且正在實現一些異步后台處理。 據我所知,來自客戶端的所有請求均由Tomcat線程池中的一個線程處理,並且在處理完請求后,響應(更新的應用程序狀態)將返回給客戶端並進行渲染。

因為我有一些任務要在后台執行,所以我需要在主HTTP線程中顯示“正在加載...”標簽,並且在顯示之后,我需要啟動一個后台線程來執行任務,並在任務完成時進行操作,應用程序的狀態被推送到客戶端(使用ICEPush附加組件)。

問題是,在我看來,有時后台線程在主HTTP線程將響應返回給客戶端之前完成,因此沒有顯示“ Loading ...”標簽,並且有時客戶端上的應用程序狀態沒有完全更新,因為其中。 因此,我需要在主HTTP線程返回響應之后啟動后台線程。

有沒有辦法做到這一點? 還是我對這種方法完全錯誤?

謝謝!

據我了解,線程中的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();
           }
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM