Executors
提供newCachedThreadPool()
和newScheduledThreadPool()
,但不提供newCachedScheduledThreadPool()
,这里给出了什么?我有一个接收突发消息的应用程序,并且需要在每个消息的固定延迟之后安排相当长的处理步骤。时间限制不是非常严格,但如果我超过池大小,我宁愿在运行中创建更多线程,然后在不活动期间将它们修剪回来。是否有我在并发库中遗漏的东西,或者我是否需要自己编写?
答案 0 :(得分:8)
根据设计,ScheduledThreadPoolExecutor是固定大小。您可以使用提交到普通ExecutorService的单线程版本来执行任务。此事件线程+工作池相当容易协调,灵活性弥补了专用线程。我过去曾用它来替换TimerTasks和其他非关键任务,以将公共执行程序用作系统范围的池。
答案 1 :(得分:6)
此处建议Why does ScheduledThreadPoolExecutor only accept a fixed number of threads?解决方法:
scheduledExecutor = new ScheduledThreadPoolExecutor(128); //no more than 128 threads
scheduledExecutor.setKeepAliveTime(10, TimeUnit.SECONDS);
scheduledExecutor.allowCoreThreadTimeOut(true);
答案 2 :(得分:3)
java.util.concurrent.Executors
只不过是构建执行者常见安排的静态便捷方法的集合。
如果您想要Executors
未提供的特定内容,请使用Executors
中的示例作为指导,随意构建您自己的实现类实例。
答案 3 :(得分:-2)
像skaffman所说,Executors
只是工厂方法的集合。如果您需要特定实例,则可以随时检查所有现有Executor
实现者。在你的情况下,我认为调用ScheduledThreadPoolExecutor的各种构造函数之一是个好主意。