== Why is this an issue?

`ThreadPoolExecutor` is an object that efficiently manages and controls the execution of multiple tasks in a thread pool.
A thread pool is a collection of pre-initialized threads ready to execute tasks.
Instead of creating a new thread for each task, which can be costly in terms of system resources, a thread pool reuses existing threads.

`java.util.concurrent.ScheduledThreadPoolExecutor` is an extension of `ThreadPoolExecutor` that can additionally schedule commands to run
after a given delay or to execute periodically.

`ScheduledThreadPoolExecutor` 's pool is sized with `corePoolSize`, so setting `corePoolSize` to zero means the executor will have no
threads and run nothing. `corePoolSize` should have a value greater than zero and valid for your tasks.

This rule detects instances where `corePoolSize` is set to zero via its setter or the object constructor.

=== Noncompliant code example

[source,java]
----
public void do(){

  int poolSize = 5; // value greater than 0

  ScheduledThreadPoolExecutor threadPool1 = new ScheduledThreadPoolExecutor(0); // Noncompliant

  ScheduledThreadPoolExecutor threadPool2 = new ScheduledThreadPoolExecutor(poolSize);
  threadPool2.setCorePoolSize(0);  // Noncompliant
}
----

== Resources

=== Documentation
* https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html[Oracle Java SE - ScheduledThreadPoolExecutor]

=== Articles & blog posts
* https://engineering.zalando.com/posts/2019/04/how-to-set-an-ideal-thread-pool-size.html[Zalando - How to set an ideal thread pool size]
* https://www.baeldung.com/java-threadpooltaskexecutor-core-vs-max-poolsize[Baeldung - ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize]


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Increase the "corePoolSize".


'''
== Comments And Links
(visible only on this page)

=== on 8 Oct 2014, 19:12:56 Ann Campbell wrote:
\[~nicolas.peru] after writing this rule up, I noticed that its analog is commented-out:

        /**

* Since you can change the number of core threads for a scheduled
* thread pool executor, disabling this for now
         *

So... what do you think of a smarter implementation (I'd have to update the description) that detects when it's set to zero & left that way?

=== on 21 Oct 2014, 15:47:15 Nicolas Peru wrote:
This is way harder. The "left that way" part can concern a lot of code not under analysis scope.

=== on 21 Oct 2014, 20:01:32 Ann Campbell wrote:
Do you feel the rule has value as-is or should we scrap it as was done in FB?

=== on 4 Feb 2015, 08:59:04 Nicolas Peru wrote:
Let's reimplement it as what was done in FB. Scheduled for 3.0.

endif::env-github,rspecator-view[]
