据我所知,链表和数组都可以无限增长还是我错了?但是当我浏览了 Executor Service 中的文档时,我看到了:
无界队列。当所有 corePoolSize 线程都忙时,使用无界队列(例如没有预定义容量的 LinkedBlockingQueue)将导致新任务在队列中等待。因此,不会创建超过 corePoolSize 个线程。(因此 maximumPoolSize 的值没有任何影响。)
那么当具有定义的容量时,Unbounded Queue
属性会发生变化吗?LinkedBlockingQueue
这写的是ArrayBlockingQueue
:
有界队列。当与有限的 maximumPoolSizes 一起使用时,有界队列(例如 ArrayBlockingQueue)有助于防止资源耗尽,但可能更难以调整和控制。队列大小和最大池大小可以相互权衡:使用大队列和小池可以最大限度地减少 CPU 使用率、操作系统资源和上下文切换开销,但可能会导致人为地降低吞吐量。如果任务经常阻塞(例如,如果它们受 I/O 限制),系统可能能够为比您允许的更多线程安排时间。使用小队列通常需要更大的池大小,这会使 CPU 更忙,但可能会遇到不可接受的调度开销,这也会降低吞吐量。