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.
1. corePoolSize Thread pool core thread size
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.
2. maximumPoolSize The maximum number of threads in the thread pool
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.
3. keepAliveTime idle thread survival time
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
4. Unit idle thread survival time unit
The measurement unit of keepAliveTime
5. workQueue work queue
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.
6. threadFactory thread factory
The factory used when creating a new thread, can be used to set the thread name, whether it is a daemon thread, etc.
7. handler rejection Strategy
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!

JVM handles operating system API differences through JavaNativeInterface (JNI) and Java standard library: 1. JNI allows Java code to call local code and directly interact with the operating system API. 2. The Java standard library provides a unified API, which is internally mapped to different operating system APIs to ensure that the code runs across platforms.

modularitydoesnotdirectlyaffectJava'splatformindependence.Java'splatformindependenceismaintainedbytheJVM,butmodularityinfluencesapplicationstructureandmanagement,indirectlyimpactingplatformindependence.1)Deploymentanddistributionbecomemoreefficientwi

BytecodeinJavaistheintermediaterepresentationthatenablesplatformindependence.1)Javacodeiscompiledintobytecodestoredin.classfiles.2)TheJVMinterpretsorcompilesthisbytecodeintomachinecodeatruntime,allowingthesamebytecodetorunonanydevicewithaJVM,thusfulf

JavaachievesplatformindependencethroughtheJavaVirtualMachine(JVM),whichexecutesbytecodeonanydevicewithaJVM.1)Javacodeiscompiledintobytecode.2)TheJVMinterpretsandexecutesthisbytecodeintomachine-specificinstructions,allowingthesamecodetorunondifferentp

Platform independence in JavaGUI development faces challenges, but can be dealt with by using Swing, JavaFX, unifying appearance, performance optimization, third-party libraries and cross-platform testing. JavaGUI development relies on AWT and Swing, which aims to provide cross-platform consistency, but the actual effect varies from operating system to operating system. Solutions include: 1) using Swing and JavaFX as GUI toolkits; 2) Unify the appearance through UIManager.setLookAndFeel(); 3) Optimize performance to suit different platforms; 4) using third-party libraries such as ApachePivot or SWT; 5) conduct cross-platform testing to ensure consistency.

Javadevelopmentisnotentirelyplatform-independentduetoseveralfactors.1)JVMvariationsaffectperformanceandbehavioracrossdifferentOS.2)NativelibrariesviaJNIintroduceplatform-specificissues.3)Filepathsandsystempropertiesdifferbetweenplatforms.4)GUIapplica

Java code will have performance differences when running on different platforms. 1) The implementation and optimization strategies of JVM are different, such as OracleJDK and OpenJDK. 2) The characteristics of the operating system, such as memory management and thread scheduling, will also affect performance. 3) Performance can be improved by selecting the appropriate JVM, adjusting JVM parameters and code optimization.

Java'splatformindependencehaslimitationsincludingperformanceoverhead,versioncompatibilityissues,challengeswithnativelibraryintegration,platform-specificfeatures,andJVMinstallation/maintenance.Thesefactorscomplicatethe"writeonce,runanywhere"


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

Dreamweaver CS6
Visual web development tools

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version
Visual web development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!
