=act #19201 improve configuration of thread-pool-executor
* The old implementation would cap the pool size (both corePoolSize and maximumPoolSize) to max-pool-size, which is very confusing becuase maximumPoolSize is only used when the task queue is bounded. * That resulted in configuring core-pool-size-min and core-pool-size-max was not enough, because it could be capped by the default max-pool-size. * The new behavior is simply that maximumPoolSize is adjusted to not be less than corePoolSize, but otherwise the config properties match the underlying ThreadPoolExecutor implementation. * Added a convenience fixed-pool-size property.
This commit is contained in:
parent
a99fee96df
commit
a1c3dbe307
19 changed files with 119 additions and 66 deletions
|
|
@ -123,17 +123,14 @@ final case class ThreadPoolConfigBuilder(config: ThreadPoolConfig) {
|
|||
def withNewThreadPoolWithArrayBlockingQueueWithCapacityAndFairness(capacity: Int, fair: Boolean): ThreadPoolConfigBuilder =
|
||||
this.copy(config = config.copy(queueFactory = arrayBlockingQueue(capacity, fair)))
|
||||
|
||||
def setFixedPoolSize(size: Int): ThreadPoolConfigBuilder =
|
||||
this.copy(config = config.copy(corePoolSize = size, maxPoolSize = size))
|
||||
|
||||
def setCorePoolSize(size: Int): ThreadPoolConfigBuilder =
|
||||
if (config.maxPoolSize < size)
|
||||
this.copy(config = config.copy(corePoolSize = size, maxPoolSize = size))
|
||||
else
|
||||
this.copy(config = config.copy(corePoolSize = size))
|
||||
this.copy(config = config.copy(corePoolSize = size, maxPoolSize = math.max(size, config.maxPoolSize)))
|
||||
|
||||
def setMaxPoolSize(size: Int): ThreadPoolConfigBuilder =
|
||||
if (config.corePoolSize > size)
|
||||
this.copy(config = config.copy(corePoolSize = size, maxPoolSize = size))
|
||||
else
|
||||
this.copy(config = config.copy(maxPoolSize = size))
|
||||
this.copy(config = config.copy(maxPoolSize = math.max(size, config.corePoolSize)))
|
||||
|
||||
def setCorePoolSizeFromFactor(min: Int, multiplier: Double, max: Int): ThreadPoolConfigBuilder =
|
||||
setCorePoolSize(scaledPoolSize(min, multiplier, max))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue