使用 Executors.newCachedThreadPool()
时,线程池中最初创建了多少线程,Javadoc 没有指定任何数字,是否有一个保证的数字,我们最初总是会得到 10 个或其他什么。文档如下:
newCachedThreadPool public static ExecutorService newCachedThreadPool()创建一个线程池,该线程池根据需要创建新的线程,但会在以前构建的线程可用时重用它们。这些池通常会提高执行许多短期异步任务的程序的性能。调用execute将重用以前构造的线程(如果可用)。如果没有可用的现有线程,将创建一个新线程并将其添加到池中。六十秒内未使用的线程将被终止并从缓存中删除。因此,保持空闲足够长时间的池不会消耗任何资源。请注意,可以使用ThreadPoolExecutor构造函数创建具有相似属性但不同细节(例如,超时参数)的池。返回:新创建的线程池
答案是0
。
您可以在源代码中找到,在创建 ThreadPoolExecutor
之后,没有生成任何工作线程。
如果我有一个固定大小的线程池,它什么时候真正调用启动线程?(它会在创建时启动它们吗?还是等到我开始提交任务时再启动?)
我在很多地方读过,线程池减少了线程创建开销,从而提高了性能。但是一旦线程执行完它的run方法,它就会进入dead/terminated状态,这意味着它可以再次重新启动。 那么,线程池如何处理线程的释放呢?它是否真的以某种方式保存线程以服务下一个任务,或者在每次提交任务时在内部创建新线程?
本文向大家介绍C#程序创建线程池,包括了C#程序创建线程池的使用技巧和注意事项,需要的朋友参考一下 对于线程池,创建两个以上的函数并排队执行方法。 首先,创建类似的方法- 以相同的方式,创建更多方法,然后使用 ThreadPool.QueueUserWorkItem将方法排队以执行- 示例 您可以尝试运行以下C#代码来创建线程池。 输出结果
本文向大家介绍如何创建线程池 ?相关面试题,主要包含被问及如何创建线程池 ?时的应答技巧和注意事项,需要的朋友参考一下 在《阿里巴巴 Java 开发手册》“并发处理”这一章节,明确指出线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。 为什么呢? 使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开销,解决资源不足的问题。如果不使用线程池,有可能会造成系统创建大量同类线程而
有没有可能使用一组线程池来共享大型线程池中的线程,而不是创建新的线程? 在我们的RESTful API应用程序中,一个请求可能涉及多个并行任务。为了提高性能,我们希望在具有固定数量(比如200个)线程的线程池中执行并行任务。但是我们也希望限制每个请求可以使用的最大线程数。所以我在想,如果有可能为每个请求创建一个具有最大池大小的子线程池,它不会自己创建线程,而是尝试从全局线程池中获取一个新线程,并在
问题 你创建一个工作者线程池,用来响应客户端请求或执行其他的工作。 解决方案 concurrent.futures 函数库有一个 ThreadPoolExecutor 类可以被用来完成这个任务。 下面是一个简单的TCP服务器,使用了一个线程池来响应客户端: from socket import AF_INET, SOCK_STREAM, socket from concurrent.futures