gpt4 book ai didi

java - Java 程序中拥有多个 Executors.newCachedThreadPool() 是否安全?

转载 作者:行者123 更新时间:2023-12-01 19:36:18 25 4
gpt4 key购买 nike

此方法的规范:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newCachedThreadPool()

Creates a thread pool that creates new threads as needed, but will reuse previously constructed threads when they are available. These pools will typically improve the performance of programs that execute many short-lived asynchronous tasks. Calls to execute will reuse previously constructed threads if available. If no existing thread is available, a new thread will be created and added to the pool. Threads that have not been used for sixty seconds are terminated and removed from the cache. Thus, a pool that remains idle for long enough will not consume any resources. Note that pools with similar properties but different details (for example, timeout parameters) may be created using ThreadPoolExecutor constructors.

从这个描述中我不清楚 - 在一个程序中拥有多个这样的池是否安全?或者我是否可能会遇到这样一种情况:一个池在许多线程上停滞并卡住其他池?

最佳答案

我认为对此没有明确的是/否答案。

一方面,ThreadPoolExecutor 实例消耗的线程数量没有限制。 JVM架构本身并不限制线程数量。

另一方面,操作系统/环境可能会施加一些限制:

  • 操作系统可能对其支持的 native 线程总数有硬性限制。

  • 操作系统可能限制给定进程(在本例中为 JVM)可以创建的 native 线程数量。这可以使用 ulimitcgroup 限制以及其他可能的方式来完成。

  • 在典型的 64 位 JVM 上,Java 线程堆栈的大小为 1MB(默认情况下)。如果您尝试 start() 太多线程,您可能会耗尽内存并收到 OOME。

  • 如果有足够多的线程和/或太多的线程上下文切换,线程调度程序(在操作系统中)可能会很困难。

    (上下文切换通常发生在线程执行阻塞系统调用或必须等待锁或通知时。每次切换上下文时,都会产生与硬件相关的开销:保存和恢复寄存器、切换虚拟内存上下文、刷新内存缓存等)

第三方面,除了线程池的数量和大小之外,还有其他因素可能会导致问题。例如,如果线程任务相互交互,您可能会遇到以下问题:

  • 锁定共享对象时发生死锁,
  • 共享锁争用过多导致资源匮乏,
  • 工作量过多导致超时,或者
  • 优先级倒置问题...如果您尝试使用优先级来“管理”工作负载。

所以...

Is it safe to have several of these pools in a single program?

Or would I potentially run into a situation where one pool stalls on many threads and freezes up other pools.

你不太可能会遇到“停滞”......除非任务以某种方式交互。

但是,如果有太多可运行线程竞争 CPU,则每个线程(平均而言)将在有限数量的可用核心中获得较小的份额。锁争用或过多的上下文切换可能会进一步减慢速度。

关于java - Java 程序中拥有多个 Executors.newCachedThreadPool() 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57385178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com