我有一个由32个缓存对象组成的数组,我每20秒就会定期刷新每个缓存。下面是附加的代码段。
我观察到在一些刷新周期后很少有缓存停止刷新,并且日志中没有打印异常。请注意,应用程序没有崩溃,但是某些缓存没有刷新。
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);
}
}
}
是否有可能线程超出了最大堆限制,并且抛出了错误,但是由于我没有捕获错误,所以没有观察到它?
但是我不确定一个线程是否抛出了内存不足错误,那么整个应用程序会停止运行还是只会影响一个线程?有何评论?