Java批处理应用程序和空闲线程池

时间:2017-11-16 03:19:35

标签: java multithreading batch-file concurrency

我有java应用程序处理批处理文件,服务是bursty,我得到很多或很少的文件然后没有处理一段时间,有时几个小时。我有一个线程池来并行处理批处理文件请求。我观察到,在空闲时间之后首先进行处理很慢,然后它会加快速度。应用程序持续数天,预热,但应用程序不活动后没有一致的响应时间。线程在空闲时间后真的变得“冷”吗?如果是这样,在不活动时间内保持应用程序热身的方法是什么?

这是我的ThreadPoolTask​​Executor初始化:

final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(100);
        executor.setMaxPoolSize(2000);
        executor.setQueueCapacity(250);
        executor.setThreadNamePrefix(prefix);
        executor.setKeepAliveSeconds(20);
        executor.setWaitForTasksToCompleteOnShutdown(wait);

1 个答案:

答案 0 :(得分:0)

ThreadPoolExecutor中有两种类型的线程:核心和非核心。 核心线程始终处于活动状态,默认情况下无法终止。只能使用allowCoreThreadTimeOut终止它们。相反,如果非核心线程的空闲时间超过keepAliveTime,则终止它们。以下是ThreadPoolExecutor配置参数的全面说明。因此,只有核心线程可以保持池温,并为您提供一致的响应时间。提供核心线程数的ExecutorService.newFixedThreadPool似乎是适合您案例的线程池配置。权衡是持续使用OS资源来保持线程活跃。

相关问题