Java ThreadPoolExecutor在处理

时间:2015-08-25 06:44:43

标签: java multithreading garbage-collection executorservice threadpoolexecutor

我有一个自定义线程池执行器

public class CustomTPExecutor extends ThreadPoolExecutor
{

     /* Constructor called from my processor */

     public CustomTPExecutor (int corePoolSize, int maxPoolSize, long keepAliveTime,
  TimeUnit timeUnit, BlockingQueue<Runnable> blockingQueue,
  ThreadFactory threadFactory,Processor processor)
      {
        super(corePoolSize, maxPoolSize, keepAliveTime, timeUnit, blockingQueue,threadFactory);
        this.processor = processor;
     }
     @Override
     protected void afterExecute(Runnable paramRunnable, Throwable paramThrowable) 
    {
      super.afterExecute(paramRunnable, paramThrowable);
      /* Notify the processor to get more records */
    }
}

在我的处理器中,我将为此customTPExecutor创建实例,并向其提交超过1000个任务。最大池大小为5.

为了将其提交给遗嘱执行人,我们使用此方法。

while(iterating map events containing 1000+records) {
 CustomThread tt = new TxnTCustomThread(eventMap.get(key), key,maxDate,connPool,connPool.getConnection(),email);
  executor.submit(tt); 
}

处理完所有记录后,我们调用执行器关闭方法。

我们注意到的一件事是,当线程正在执行时,它会在处理过程中暂停一段时间。它暂停一分钟左右然后恢复处理记录。我不确定这是什么原因。

我假设这是因为垃圾收集没有正常发生。我也无法从日志中获取任何内容以进行调试。在此过程中,java的内存消耗大幅减少。

有关如何解决此问题的任何建议都会非常有用。

0 个答案:

没有答案