У меня есть массив из 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);
}
}
}
Возможно ли, что поток превышает максимальный предел кучи и выдается ошибка, но так как я не улавливаю ошибку, я не наблюдаю ее?
Но я не уверен, если одна нить выдает ошибку из памяти, тогда остановится все приложение или будет затронут только поток? Любой комментарий?