2014-06-26 106 views
0

我正在使用ThreadPool执行程序在do while循环中作为deamon进程。我在创建新的固定线程池: executor = Executors.newFixedThreadPool(5);执行程序ThreadPool,垃圾回收

任务完成后,我在下一次迭代开始前调用shutdown,并为new 5 worker线程创建newFixedPool。

现在打印Log4J日志。我正在使用[%t]来显示执行哪个线程池。 我看到每个迭代新线程池获得创建一个递增的数字。

请让我知道在开始下一次迭代之前,我需要调用executor = null吗?

递增的线程池指示线程池获取累积并可能导致内存泄漏,因为它是一个deamon进程或在后端线程池将被垃圾收集,因为所有线程都已完成并且我们已经执行了关闭。

2014-06-26 16:26:11,548 [47 ] [INFO ][pool-1-thread-1] - Started processing new   payments for serverID: 5 
2014-06-26 16:26:11,548 [47 ] [INFO ][pool-1-thread-2] - Started processing new payments for serverID: 6 
2014-06-26 16:26:11,548 [47 ] [INFO ][pool-1-thread-3] - Started processing new payments for serverID: 7 
2014-06-26 16:26:11,548 [47 ] [INFO ][pool-1-thread-4] - Started processing new payments for serverID: 8 
2014-06-26 16:26:11,548 [47 ] [INFO ][pool-1-thread-5] - Started processing new payments for serverID: 9 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-2] - Completed processing new payments for serverID: 6 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-5] - Completed processing new payments for serverID: 9 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-2] - Time taken to Process new payments for serverId 6 : 12 Sec 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-5] - Time taken to Process new payments for serverId 9 : 12 Sec 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-3] - Completed processing new payments for serverID: 7 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-1] - Completed processing new payments for serverID: 5 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-3] - Time taken to Process new payments for serverId 7 : 12 Sec 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-1] - Time taken to Process new payments for serverId 5 : 12 Sec 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-4] - Completed processing new payments for serverID: 8 
2014-06-26 16:26:24,129 [12628 ] [INFO ][pool-1-thread-4] - Time taken to Process new payments for serverId 8 : 12 Sec 
2014-06-26 16:26:24,129 [12628 ] [INFO ][main] - ShutDown complete 
2014-06-26 16:26:24,129 [12628 ] [INFO ][main] - ProcessDeamon iteration finished in 0 Sec 
2014-06-26 16:26:24,129 [12628 ] [INFO ][main] - ProcessDeamon iteration started 
2014-06-26 16:26:24,191 [12690 ] [INFO ][pool-2-thread-1] - Started processing new payments for serverID: 5 
2014-06-26 16:26:24,191 [12690 ] [INFO ][pool-2-thread-2] - Started processing new payments for serverID: 6 
2014-06-26 16:26:24,191 [12690 ] [INFO ][pool-2-thread-3] - Started processing new payments for serverID: 7 
2014-06-26 16:26:24,191 [12690 ] [INFO ][pool-2-thread-4] - Started processing new payments for serverID: 8 
2014-06-26 16:26:24,191 [12690 ] [INFO ][pool-2-thread-5] - Started processing new payments for serverID: 9 

2014-06-26 16:26:34,443 [22942 ] [INFO ][pool-2-thread-2] - Completed processing new payments for serverID: 6 
2014-06-26 16:26:34,443 [22942 ] [INFO ][pool-2-thread-2] - Time taken to Process new payments for serverId 6 : 10 Sec 
2014-06-26 16:26:34,490 [22989 ] [INFO ][pool-2-thread-4] - Completed processing new payments for serverID: 8 
2014-06-26 16:26:34,490 [22989 ] [INFO ][pool-2-thread-3] - Completed processing new payments for serverID: 7 
2014-06-26 16:26:34,490 [22989 ] [INFO ][pool-2-thread-5] - Completed processing new payments for serverID: 9 
2014-06-26 16:26:34,490 [22989 ] [INFO ][pool-2-thread-4] - Time taken to Process new payments for serverId 8 : 10 Sec 
2014-06-26 16:26:34,490 [22989 ] [INFO ][pool-2-thread-3] - Time taken to Process new payments for serverId 7 : 10 Sec 
2014-06-26 16:26:34,490 [22989 ] [INFO ][pool-2-thread-5] - Time taken to Process new payments for serverId 9 : 10 Sec 
2014-06-26 16:26:34,521 [23020 ] [INFO ][pool-2-thread-1] - Completed processing new payments for serverID: 5 
2014-06-26 16:26:34,521 [23020 ] [INFO ][pool-2-thread-1] - Time taken to Process new payments for serverId 5 : 10 Sec 
2014-06-26 16:26:34,521 [23020 ] [INFO ][main] - ShutDown complete 
2014-06-26 16:26:34,521 [23020 ] [INFO ][main] - ProcessDeamon iteration finished in 0 Sec 
2014-06-26 16:26:34,521 [23020 ] [INFO ][main] - ProcessDeamon iteration started 

回答

0

不要关闭你的线程池,但重新使用它。这就是拥有一个线程池的关键:你将任务提交到这个池中,而不必关心线程管理。等待你的线程终止并将下一批任务提交到同一个池中。

+0

我无法重用......因为我希望所有迭代都一致。这就是原因,我打电话给关机...然后等待无限循环来检查执行程序是否终止。执行关机后,不能重复使用同一个池...从文档中...执行程序不会接受新的任务.. – Apt

+0

请阅读并理解“ThreadpoolExecutor”的API。不要等待无限循环,而是使用“awaitTermination”。如果你想在同一个'Threadpool'中执行多批任务,不要关闭那个池,而是等待'getActiveCount == 0'成为true – Jonathan