2012-01-09 10 views
5

Piszę aplikację w Javie przy użyciu ThreadPool. Najpierw tworzę nowy ThreadPool:Pula wątków w Javie

private ExecutorService threadExecutor = Executors.newFixedThreadPool(20); 

Następnie tworzę niektóre obiekty Runnable. Potem wykonać mojego puli wątków, od czasu do czasu przekazując mu to samo Runnable obiektu:

threadExecutor.execute(serverRunnable); 

I wykonanie tej puli wątków, co 20 sekund. Mój problem polega na tym, że threadExecutor przestaje działać przez około 5 minut. Po prostu nie wykonuję Runnable object. Zauważam, że gdy zwiększam argument w:

Executors.newFixedThreadPool(20); 

od 20 do np. 100 ThreadPool będzie działać dłużej. Czy ktoś może mi wyjaśnić, dlaczego ThreadPool przestał działać?

Ps. Piszę ten kod w Androidzie

+1

Proszę zaksięgować kod z obiektu 'serverRunnable'. – artbristol

+3

Czy twój Runnable stop poprawnie? Jeśli nigdy nie zakończą swojej metody 'run()', twoja pula zostanie wyczerpana, a 'execute()' zablokuje oczekiwanie na dostęp do jednego gniazda w puli. – Viruzzo

+0

No cóż, używam na przykład serverRunnable. Mijam wiele różnych Runnable do ThreadPoll i wszystkie one się kończą. Niektóre z nich wykonują trywialną pracę, piszą coś w dzienniku. – klemens

Odpowiedz

Powiązane problemy