0
在我的應用程序中,用戶可以在所有已定義的應用程序上創建數據過濾器,因爲處理所有應用程序可能需要一段時間,所以我決定讓這個任務在另一個線程上執行。我使用的是:java servlets中的多線程
private static final ExecutorService executor = Executors.newSingleThreadExecutor();
public static JSON createFilter(HttpServletRequest req, HttpServletResponse resp){
...
// some type checking then apply filters
...
for(Integer appId : appIds){
executor.execute(new ApplyFilterTask(appId));
}
}
我ApplyFilterTask很簡單:
private static class ApplyFilterTask implements Runnable{
private static ManagerService ms = null;
int appId;
public ApplyFilterTask(int appId) {
this.appId = appId;
}
@Override
public void run() {
if (ms == null){
ms = new ManagementService();
}
try {
ms.applyFilters(appId);
} catch (Exception e) {
// log the error
}
}
我想有以下行爲,當用戶創建一個新的過濾器,一個新的線程將開始並逐個處理所有的應用程序(這對第二個線程可能需要一段時間),然後我想殺死線程(以節省資源)
我的p roblems是:
- 我不知道往哪裏放
executor.shutdown();
在我的代碼 - 如果另一個用戶創建一個過濾器的過程中,會發生什麼?我如何讓我的servlet使用相同的線程,或者至少等到第一個創建另一個之前完成?
在此先感謝