executorservice.newcachedthreadpool()
的定义为
public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(),
threadFactory);
}
所以不会创建新的线程,我们只能用1个线程?
不是真的。
请注意NewCachedThreadPool
使用SynchronousQueue
:
>
如果有空闲的工作线程试图为队列获取任务,任务将被成功地放入队列,并立即被该空闲线程获取并执行。
否则,此任务不能放入队列,换句话说,队列已满。然后将创建新的线程来执行该任务
问题内容: 我试图了解ThreadPoolExecutor类。我已经阅读了这个答案和Javadoc。但是我的实验与该描述不符: 我用一个用于跟踪ID的工厂初始化线程池 然后的任务: 并为按钮分配操作: 但是我向该按钮发送了垃圾邮件,并且从不创建第三个线程,因此ThreadPoolExecutor构造函数()中的第二个参数是什么。我希望在执行结束1分钟后创建4个线程,并杀死其中2个线程 问题答案:
我在练习Java并发性时,被困在了8.3.1线程创建和拆卸主题上。下面的脚注警告要将corePoolSize保持为零。 开发人员有时会倾向于将核心大小设置为零,这样工作线程最终会被拆除,因此不会阻止JVM退出,但这可能会在不使用同步队列的线程池中导致一些看似奇怪的行为。工作队列(如newCachedThreadPool所做的那样)。如果池已经达到核心大小,则ThreadPoolExector仅在工
问题内容: 继续我提出的问题,我试图在我的代码库中使用ThreadPoolExecutor。即使反复尝试从Java API文档中理解,我也无法清楚地理解keepAliveTime要在构造函数中传递的参数的功能/目的。希望有人可以通过一些很好的例子向我解释。 Java文档摘录: keepAliveTime-当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间。 问题答案: 假设您
java.util.concurrent.ThreadPoolExecutor是一个ExecutorService,它使用可能的几个池化线程之一执行每个提交的任务,通常使用Executors工厂方法配置。 它还提供各种实用程序方法来检查当前线程统计信息并控制它们。 ThreadPoolExecutor方法 Sr.No. 方法和描述 1 protected void afterExecute(Run
问题内容: 我的问题: 如何在a上执行一堆线程对象并等待它们全部完成后再继续? 我是ThreadPoolExecutor的新手。因此,此代码是测试以了解其工作方式。现在我什至都不用对象填充,因为我不理解如何在不调用另一个队列的情况下开始队列。无论如何,现在我只是打电话给我,但我认为我仍然缺少一些东西。任何提示都很棒!谢谢。 RunnableObject类: 问题答案: 你应该循环
我读到有一个线程池,这个池注定要减少创建新线程的成本(至少我这样理解下面的短语): 当您向执行程序发送任务时,它会尝试使用一个池线程来执行此任务,以避免线程的持续生成。[Java7并发Cookbook] 但是,我知道我们没有办法在Java重启线程。 问题:ThreadPoolExecutor如何避免创建新线程?