我有一個 JSP 應用程式,其中一個網頁一個接一個呼叫五個方法(它們都是從不同來源獲取資料)并根據資料顯示圖表。
為了快速加載網頁,我計劃在 FixedThreadPool Executor 的幫助下并行呼叫所有五個方法。
一旦我從所有五種方法中得到結果,我應該關閉我的執行器嗎?在我看來,關閉 executor 是一個壞主意,因為如果有人第二次打開網頁,它將需要 executor 再次初始化以便并行呼叫這五個方法。
但是,我不確定將 executor 保持打開狀態的后果,因此不確定如何繼續。
uj5u.com熱心網友回復:
保持打開狀態是使用執行緒池的正常方式。這就是執行緒池的全部意義:它是為了防止您的應用程式每次需要加載頁面時都必須創建然后銷毀許多新執行緒。相反,它可以一次又一次地使用相同的執行緒。
uj5u.com熱心網友回復:
在“Java Concurrency in Practice”的第 7 章中有一個這樣的例子,其中提出了所謂的一次性執行服務:
如果一個方法需要處理一批任務,并且直到所有任務完成才回傳,它可以通過使用一個生命周期受該方法限制的私有Executor來簡化服務生命周期管理。
其代碼示例:
boolean checkMail(Set<String> hosts, long timeout, TimeUnit unit)
throws InterruptedException {
ExecutorService exec = Executors.newCachedThreadPool();
final AtomicBoolean hasNewMail = new AtomicBoolean(false);
try {
for (final String host : hosts)
exec.execute(new Runnable() {
public void run() {
if (checkMail(host))
hasNewMail.set(true);
}
});
} finally {
exec.shutdown();
exec.awaitTermination(timeout, unit);
}
return hasNewMail.get();
}
我建議使用這種方法簡化您的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/382666.html
