[英]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.