我写它除了具有通常的请求 - 响应处理的显著后台处理部分一个相当复杂的Java服务器应用程序。 一些后台处理在使用Quartz框架cron风格的方式进行。 其他任务都比较的需求 - 如果一个新的客户端连接它在一段时间更新一次它创造更多的工作。 这个cron任务也可以是多种多样的 - 做一些外部应用程序监控,一些计算统计数据等。
我使用的是大量的线程池来运行的想法所有这些工作,类似的作业将共享一个线程池,但不同的工作不会分享一个。 例如监视作业将永远统计池运行,统计工作将永远不会在监视池运行。
在另一方面,我知道有些人宁愿只是为了有一个线程池,没有任何分离在其上运行的一切。
我不知道什么被认为是在这种情况下的最佳实践。
哪些利弊分离线程池的利弊?
它甚至关系呢?
答案取决于你是否需要不同类型的活动或不分离之间的应用程序资源。
例如,我目前正在写由少数高通量作家和潜在的许多读者的服务器应用程序。 读者会偶尔访问的应用程序,但可能要求大量的数据(即长时间运行的请求)。 我需要确保作家不会缺少所以打算在我的设计进行读/写使用两个线程池。 如果读者线程池暂时耗尽作家不会受到影响; 只读请求将被推迟。
另一种做法一直使用PriorityQueue
连同ThreadPoolExecutor
并分配优先级更高的写请求。
所以在最后 - 我的建议是:用一个线程池开始关闭,只会让你的设计更复杂,如果有这样做的具体原因。
这不是一个真正的直接的答案,但另一项建议:-(
你的石英作业可以暂停,取消等,我们称之为“ 管理 ”。 我猜你会创建一些用户界面来管理它们。
你是否意识到,你的其他工作(“按需”)将不会从相同的功能中受益,除非你实现课程的呢? 你有没有考虑做一切工作的石英 (即使它开始立刻),得到一个统一的代码?