Thread pool technology is often used in java multi-thread development. This article is a detailed explanation of the seven parameters when creating a java thread pool.
As can be seen from the source code, the constructor of the thread pool has 7 parameters
These 7 parameters are:
corePoolSize: Number of core threads.
maximumPoolSize: Maximum number of threads.
keepAliveTime: idle thread survival time.
TimeUnit: time unit.
BlockingQueue: Thread pool task queue.
ThreadFactory: Factory for creating threads.
RejectedExecutionHandler: Rejection strategy.
These 7 parameters will be explained one by one below.
The thread pool will maintain a minimum number of threads. Even if these threads handle the idle state, they will not be destroyed unless allowCoreThreadTimeOut is set. The minimum number of threads here is corePoolSize.
After a task is submitted to the thread pool, it will first find out if there are any idle surviving threads. If there are, the task will be directly handed over to the idle thread. Execution, if not, it will be cached in the work queue (will be introduced later). If the work queue is full, a new thread will be created, and then a task will be taken out from the head of the work queue and handed over to the new thread for processing. Submitted tasks are placed at the end of the work queue. The thread pool will not create new threads without limit. It will have a limit on the maximum number of threads, which is specified by maximumPoolSize.
If a thread is idle and the current number of threads is greater than corePoolSize, then after the specified time, the idle thread will be destroyed, as specified here The time is set by keepAliveTime
The measurement unit of keepAliveTime
The new task is After submission, it will first enter the work queue, and then the task will be taken out from the queue during task scheduling. There are four work queues provided in jdk:
①ArrayBlockingQueue
Array-based bounded blocking queue, sorted by FIFO. After a new task comes in, it will be placed at the end of the queue. The bounded array can prevent resource exhaustion problems. When the number of threads in the thread pool reaches corePoolSize and a new task comes in, the task will be placed at the end of the queue, waiting to be scheduled. If the queue is already full, a new thread is created. If the number of threads has reached maxPoolSize, the rejection policy will be executed.
②LinkedBlockingQuene
Unbounded blocking queue based on linked list (in fact, the maximum capacity is Interger.MAX), sorted according to FIFO. Due to the approximately unbounded nature of the queue, when the number of threads in the thread pool reaches corePoolSize, new tasks will come in and will be stored in the queue without creating new threads until maxPoolSize. Therefore, when using this work queue, the parameter maxPoolSize Actually it doesn't work.
③SynchronousQuene
A blocking queue that does not cache tasks. The producer puts a task in and must wait until the consumer takes out the task. That is to say, when a new task comes in, it will not be cached, but will be directly scheduled to execute the task. If there are no available threads, a new thread will be created. If the number of threads reaches maxPoolSize, a rejection policy will be executed.
④PriorityBlockingQueue
An unbounded blocking queue with priority, the priority is implemented through the parameter Comparator.
The factory used when creating a new thread, can be used to set the thread name, whether it is a daemon thread, etc.
When the tasks in the work queue have reached the maximum limit, and the number of threads in the thread pool has also reached the maximum limit, how to handle if a new task is submitted. The rejection policy here is to solve this problem. JDK provides 4 rejection policies:
①CallerRunsPolicy
Under this policy, the run method of the rejected task is directly executed in the caller thread. , unless the thread pool has been shut down, the task will be abandoned directly.
②AbortPolicy
Under this policy, the task is directly discarded and a RejectedExecutionException is thrown.
③DiscardPolicy
Under this policy, the task is discarded directly and nothing is done.
④DiscardOldestPolicy
Under this policy, discard the earliest task that entered the queue, and then try to put the rejected task into the queue
The above is the detailed content of What is the meaning of Java thread pool parameters. For more information, please follow other related articles on the PHP Chinese website!