Отладка пользовательского многопоточного кэша - PullRequest
0 голосов
/ 31 мая 2019

У меня есть массив из 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);
        }
    }
}

Возможно ли, что поток превышает максимальный предел кучи и выдается ошибка, но так как я не улавливаю ошибку, я не наблюдаю ее?

Но я не уверен, если одна нить выдает ошибку из памяти, тогда остановится все приложение или будет затронут только поток? Любой комментарий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...