Обрабатывает ли ScheduledExecutorService
обработку завершенного потока и создает новый?
В приведенном ниже примере, если какой-либо из моих потоков завершается из-за Error
, что происходит с размером пула потоков?
Во время отладки я мог заметить, что один из потоков, созданных этой службой, был молча прерван без печати какого-либо оператора журнала. Проверяя дамп потока, я все еще мог видеть, что 32 потока все еще были там, и ни один из них не был заблокирован.
public class CacheManager
{
private static class CacheRefresher extends Thread
{
Cache cache;
public CacheRefresher(Cache cache)
{
this(cache);
}
@Override
public final void run()
{
try {
LOG.info("cache is getting refreshed for " + cache.type);
cache.refreshCache();
} catch (Exception e) {
String subject = "Cache refresh failed in BMW";
LOG.log(Level.WARN, subject + ". Exception thrown:", e);
}
}
}
public void refreshCaches(List<cache> caches)
{
ThreadFactory ourThreadFactory =
new NamedThreadFactory("CacheHandler", true);
ScheduledExecutorService scheduleService =
Executors.newScheduledThreadPool(32, ourThreadFactory);
initialDelay = 60;
for (Cache cache : caches) {
service.scheduleWithFixedDelay(new CacheRefresher(cache), initialDelay, 20, TimeUnit.SECONDS);
initialDelay += 2;
cacheContainers.add(cache);
}
}
}