当前位置: 首页 > 知识库问答 >
问题:

自定义线程池的缺点是什么?

郗浩言
2023-03-14

与自定义线程池相比,源指Oracle留档建议在并行流时使用公共线程池。

既然公共池的线程数与CPU内核数相同,那么使用公共线程池和自定义线程池有什么区别?

共有2个答案

乜业
2023-03-14

也许最好问一下,自定义线程池的优势是什么?这是更多的工作,那么为什么要这样做呢?

处理器是一种全球资源。自定义线程池可以在不同的地方创建,无需任何协调,从而“过度分配”处理器。

可重用库不应该创建自定义线程池;如果你能证明为什么需要自定义线程池,它应该在应用程序的更高级别进行管理。为了支持这一点,可重用库可能允许调用者配置(注入)自定义执行程序,并默认返回到公共线程池。

何高旻
2023-03-14

使用公共线程池和自定义线程池之间的区别是什么?自定义线程池由与公共池相同数量的线程组成?

一些重要的考虑:

>

  • 使用公共线程池,您不需要编写或维护或配置或管理自己的线程池。

    公共线程池已经存在并被使用,它已经提供了尽可能多的线程。无论如何,没有比这更多的线程可以同时取得进展,所以如果你建立了一个自定义池,并且它和公共池都被完全订阅用于非阻塞操作,那么你会从额外的线程中产生额外的开销,但不会加速。

  •  类似资料:
    • SOFARPC 支持自定义业务线程池。可以为指定服务设置一个独立的业务线程池,和 SOFARPC 自身的业务线程池是隔离的。多个服务可以共用一个独立的线程池。 SOFARPC 要求自定义线程池的类型必须是 com.alipay.sofa.rpc.server.UserThreadPool。 XML 方式 如果采用 XML 的方式发布服务,可以先设定一个 class 为 com.alipay.sof

    • 由来 在JDK中,提供了Executors用于创建自定义的线程池对象ExecutorService,但是考虑到线程池中存在众多概念,这些概念通过不同的搭配实现灵活的线程管理策略,单独使用Executors无法满足需求,构建了ExecutorBuilder。 概念 corePoolSize 初始池大小 maxPoolSize 最大池大小(允许同时执行的最大线程数) workQueue 队列,用于存在

    • 我正在编写一个定制的ThreadPoolExecutor,具有以下额外功能:- > 如果有理想的线程,并且随着任务的到来,将该任务分配到队列中,而不是将其添加到队列中。 如果所有线程(最大池大小)都忙,则在新任务到来时,使用RejectionHandler的reject方法将它们添加到队列中 我已经重写了线程池执行程序的java 1.5版本的执行方法。 新守则如下:- 遗留代码如下所示:- 现在正

    • 出于学习的目的,我正在尝试用java实现自己的线程池。下面是我已经实现的。我对这个实现有几个问题: > 虽然我像内置java一样使用BlockingQueue执行器希望我们提供Runnable对象(通过执行方法)。但在我的情况下,我觉得我可以创建任何对象而不是Runnable。那么为什么Java执行器期望Runnable,我尝试查看源代码,但还不能弄清楚。 这个原始实现还有什么问题吗? 请找到密码

    • 是否可以为Java8并行流指定自定义线程池?我到处都找不到它。 如果我不能为不同的模块使用不同的线程池,这就意味着我不能在大多数真实世界的情况下安全地使用并行流。 请尝试以下示例。有些CPU密集型任务在单独的线程中执行。这些任务利用并行流。第一个任务被打破,因此每一步需要1秒(通过线程Hibernate模拟)。问题是其他线程会被卡住,等待中断的任务完成。这是一个虚构的示例,但假设一个servlet

    • 问题内容: 是否可以为Java 8 并行流指定自定义线程池?我在任何地方都找不到。 假设我有一个服务器应用程序,并且想使用并行流。但是应用程序很大并且是多线程的,所以我想将其划分。我不希望一个模块中的一个模块中的某个模块运行缓慢,而另一个模块中的任务却运行缓慢。 如果不能为不同的模块使用不同的线程池,则意味着在大多数实际情况下,我不能安全地使用并行流。 请尝试以下示例。在单独的线程中执行一些CPU