Java更改工作线程数量
我正在使用ExecutorService创建一个固定的线程池并启动几个工作线程,这些线程监听发生的事情,然后完成他们的工作.
但有时我想增加或减少同时运行的线程数量,以便微调应用程序的性能(无需重新启动应用程序或终止任何当前运行的线程). 我应该创建自己的线程池,还是有办法让一个池的大小改变,以便在必要时处理工作人员的开始/停止. 解决方法
如果你的意思是使用某种工具或其他东西动态更改,那么我不确定,但你可以设置一些代码逻辑来控制. 您可以使用java.util.concurrent.ThreadPoolExecutor并使用CorePoolSize和MaxPoolSize属性来控制线程池. corePoolSize和maximumPoolSize: > ThreadPoolExecutor将根据corePoolSize(请参阅getCorePoolSize())和maximumPoolSize(请参阅getMaximumPoolSize())设置的边界自动调整池大小(请参阅getPoolSize()). 但在您决定之前,我建议您阅读下面摘自ThreadPoolExecutor的Java文档.
代码示例: >我们使用ArrayBlockingQueue获取20个容量的有界队列(您可以根据需要决定队列容量).因此,一旦队列中有超过20个任务等待,将创建新线程但最多为maxPoolSize. 您可以阅读ThreadPoolExecutor的“排队”部分,并根据您的要求决定其他队列. ThreadPoolExecutor.setCorePoolSize(int) //Read Java docs for details about construcutor... ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(10,100,60,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(20)); Runnable runnable = new Runnable() { @Override public void run() { //Do your task... } }; executeTasks(poolExecutor,runnable,false,false); //Compute last 2 parameters as you need and pass on required values. public static void executeTasks(ThreadPoolExecutor poolExecutor,Runnable runnable,boolean isUnderLoad,boolean isOverLoad){ if(isOverLoad && isUnderLoad){ //Handle this situation,this should not be allowed,probably a coding bug can result this... } poolExecutor.submit(runnable); if(isUnderLoad){ poolExecutor.setCorePoolSize(5); } if(isOverLoad){ poolExecutor.setCorePoolSize(20); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |