如何ScheduledExecutorService的手柄终止线程?

Deepanshu阿罗拉:

请问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);
        }
    }
}
SirFartALot:

正如Javadoc中发现的newScheduledThreadPool(INT)时时会出现线程的数额。即使一个线程将关闭,也将开始另一个。但摆在首位,内螺纹ScheduledExecutorService应该被重复使用,即使在异常之内发生Runnable.run()

并且确保线程不会阻止,但等待新的动作,做...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章