请问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);
}
}
}
正如Javadoc中发现的newScheduledThreadPool(INT)时时会出现线程的数额。即使一个线程将关闭,也将开始另一个。但摆在首位,内螺纹ScheduledExecutorService
应该被重复使用,即使在异常之内发生Runnable.run()
。
并且确保线程不会阻止,但等待新的动作,做...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句