2012-01-09 123 views
5

我使用ThreadPool在Java中編寫應用程序。首先我創建一個新的ThreadPool:Java中的線程池

private ExecutorService threadExecutor = Executors.newFixedThreadPool(20); 

然後我創建了一些Runnable對象。從那以後,我執行我的線程池不時路過他同樣Runnable對象:

threadExecutor.execute(serverRunnable); 

我執行此線程池每20秒。我的問題是,threadExecutor停止工作大約5分鐘。它只是不執行Runnable對象。我注意到當我增加參數時:

Executors.newFixedThreadPool(20); 

從20到100 ThreadPool將工作更長時間。任何人都可以解釋爲什麼ThreadPool停止工作?

Ps。如果要計劃作爲任務執行每20秒嘗試使用的ScheduledThreadPoolExecutor,而不是我寫的Android

+1

請發佈您的'serverRunnable'對象的代碼。 – artbristol 2012-01-09 10:00:57

+3

你的Runnable是否正確停止?如果他們永遠不會結束他們的'run()'方法,你的池將被耗盡,'execute()'將鎖定等待池中的一個插槽可用。 – Viruzzo 2012-01-09 10:03:44

+0

那麼我使用serverRunnable爲例。我將許多不同的Runnable傳遞給ThreadPoll,它們都停下來。他們中的一些人做了簡單的工作,在日誌中寫下一些東西。 – klemens 2012-01-09 10:04:48

回答