调试自定义多线程缓存

时间:2019-05-31 20:00:36

标签: java multithreading caching

我有一个由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);
        }
    }
}

是否有可能线程超出了最大堆限制,并且抛出了错误,但是由于我没有捕获错误,所以没有观察到它?

但是我不确定一个线程是否抛出了内存不足错误,那么整个应用程序会停止运行还是只会影响一个线程?有何评论?

0 个答案:

没有答案