在我的程序中,我編寫了一個類,每次觸發新值時都會更新一堆偵聽器。因此,我使用的是SingleThreadExecutor
,該示例應該使其更清楚。我所擔心的是,是否有意義,當我運行它這樣的:使用ExecutorService的最有效方法
Class Update() {
ExecutorService svc = Executors.newSingleThreadExecutor();
svc.execute(new Runnable() {
public void run() {
if(!theListeners.isEmpty()) {
for(IgpsdListener l : theListeners) {
l.update(jsonObject);
}
}
}
});
我聽說,那個創建線程是Java相當昂貴的行動,所以我如果我正確地使用它知道。我的意思是,每創建一個新的Runnable
對象時都會創建對象?即使是Executor也只使用唯一的線程。
在此先感謝您的幫助和啓發。 nyyrikki
我會提出'如果(theListeners.isEmpty()!)'到外執行()。沒有任何意義,增加一個沒有做任何事情的任務。我假設你正在重複使用你的執行者,而不是爲每個任務創建一個。 – 2012-02-26 21:11:49
執行者只創建一次,正確。你提到的是完全有意義的,如果我將'if()'移動到'execute()'之外,那麼在沒有註冊事件的監聽器的情況下甚至不會執行任務。沒有看到,很好......謝謝! – nyyrikki 2012-02-26 22:22:26