2014-02-28 32 views
0

我使用org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor来执行我的应用程序任务。我想限制某些数目的并行运行任务(线程)的数量,直到完成所有(或正在运行的任务的某个百分比)线程完成后才执行新线程。如何控制ThreadPoolTask​​Executor中正在运行的线程数量?

如何控制或如何获取信息?ThreadPoolExecutor实际运行多少个线程来控制执行新任务?有什么办法如何通过ThreadPoolExecutor解决它,或者我需要这样做注册新的线程开始和线程完成时注销...?

+0

“或某个百分比的”< - 你是什么意思?不是'Executors.newFixedThreadPool()'符合你的需求吗? – fge

+0

我的意思是开始新的任务/线程,例如当20%的先前启动的线程完成时。 – user2148736

回答

1

您可以使用getActiveCount()获取当前的线程数,并使用setCorePoolSize()来设置核心池大小。您应该在您的ThreadPoolTask​​Executor配置中设置池大小。但是,我不认为等到所有线程都完成之后才开始新线程,那么您应该如何使用线程池。

+0

我想我需要控制它,因为有非常大量的任务(成千上万),我可以杀死或消耗所有服务器资源(但我没有测试过它)。有没有更好的方法来避免这种情况? – user2148736

+0

如果您只想在20%完成时开始新任务(例如,初始值为100),则从一开始将setCorePoolSize设置为80。它会限制你想要的线程。 – Tautvydas

相关问题