Table of Contents
What are the four predefined thread pools in java?
Four kinds of threads What's the difference between pools?
如何自定义线程池
Home Java javaTutorial What are the four thread pools that come with Java?

What are the four thread pools that come with Java?

Apr 24, 2023 pm 07:52 PM
java

What are the four predefined thread pools in java?

  • newSingleThreadExexcutor: Thread pool with a single number of threads (number of core threads = maximum number of threads = 1)

  • newFixedThreadPool: Fixed number of threads Pool (number of core threads = maximum number of threads = custom)

  • newCacheThreadPool: Cacheable thread pool (number of core threads = 0, maximum number of threads = Integer.MAX_VALUE)

  • newScheduledThreadPool: Thread pool that supports scheduled or periodic tasks (number of core threads = custom, maximum number of threads = Integer.MAX_VALUE)

Four kinds of threads What's the difference between pools?

The above four thread pool classes all inherit ThreadPoolExecutor and directly return new ThreadPoolExecutor (parameters) when created. The difference between them is that the parameters in the defined ThreadPoolExecutor (parameters) are different, and ThreadPoolExecutor inherits the ExecutorService interface class.

  • newFixedThreadPool

Definition:
xecutorService executorService=Executors.newFixedThreadPool(2);

What are the four thread pools that come with Java?

Disadvantages: LinkBlockQueue's linked list blocking queue is used. When the accumulation speed of tasks is greater than the processing speed, it is easy to accumulate tasks and cause OOM memory overflow

  • newSingleThreadExecutor

##Definition: ExecutorService executorService =Executors.newSingleThreadExecutor();

What are the four thread pools that come with Java?

The above code is similar new FixedThreadPoop(1), but there is a difference, because there is an extra layer of FinalizableDelegatedExecutorService, its function:

What are the four thread pools that come with Java?

It can be seen that the essence of fixedExecutorService is ThreadPoolExecutor, so fixedExecutorService can be forced to transfer into ThreadPoolExecutor, but singleExecutorService has nothing to do with ThreadPoolExecutor, so the forced transfer fails. Therefore, after newSingleThreadExecutor() is created, its thread pool parameters cannot be modified, and it is truly a single thread.

Disadvantages: LinkBlockQueue's linked list blocking queue is used. When the accumulation speed of tasks is greater than the processing speed, it is easy to accumulate tasks and cause OOM memory overflow

newCacheThreadPool

Definition: ExecutorService executorService=Executors.newCacheThreadPool();

What are the four thread pools that come with Java?

Disadvantages: SynchronousQueue is an implementation of BlockingQueue, it is also a queue, because the maximum number of threads is Integer.MAX_VALUE, so when there are too many threads, it is easy to OOM memory overflow

ScheduledThreadPool

Definition: ExecutorService executorService=Executors.newScheduledThreadPool(2);

源码:
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        //ScheduledThreadPoolExecutor继承ThreadPoolExecutor
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }
    
public ScheduledThreadPoolExecutor(int corePoolSize) {
    //ScheduledThreadPoolExecutor继承ThreadPoolExecutor,故super()会调用ThreadPoolExecutor的构造函数初始化并返回一个ThreadPoolExecutor,而ThreadPoolExecutor使实现ExecutorService接口的
    //最终ScheduledThreadPoolExecutor也和上面几种线程池一样返回的是ExecutorService接口的实现类ThreadPoolExecutor
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
          new DelayedWorkQueue());
}
Copy after login
What are the important parameters of the thread pool?

ThreadPoolExecutor construction method is as follows:

What are the four thread pools that come with Java?

What are the four thread pools that come with Java?

    ##keepAliveTime refers to the current number of threads located in [core Number of threads, maximum number of threads] How long do these non-core threads wait for idle time without any work before exiting the thread pool;
  • The size of the waiting list and the maximum number of threads It has nothing to do with it. Thread creation priority = core thread> blocking queue> thread expansion (threads can be expanded only when the current number of core threads is less than the maximum number of threads)
  • If the core The number of threads is 5, the waiting queue length is 3, and the maximum number of threads is 10: When the number of threads continues to increase, 5 core threads are created first. When the number of core threads is full, the threads are thrown into the waiting queue. When the waiting queue is full (3 threads), the maximum number of threads will be compared at this time (you can only appear after waiting for the maximum number of threads to be filled), and you can continue to create 2 threads (5 3 2). If the number of threads exceeds the maximum number of threads, the execution will be rejected. Strategy;
  • If the number of core threads is 5, the waiting queue length is 3, and the maximum number of threads is 7: When the number of threads continues to increase, create 5 core threads first, and the number of core threads is full. Then throw the thread into the waiting queue. When there are 2 threads in the waiting queue, the maximum number of threads is reached (5 2 = 7), but the waiting queue is not full yet, so you don’t need to worry about the maximum number of threads until the waiting queue is full. (3 blocked threads), the maximum number of threads will be compared at this time (only the maximum number of threads waiting for the queue to be lost can exit), at this time the core is waiting for the queue to be lost = 5 3 = 8>7 = the maximum number of threads, that is, it has been reached If the maximum number of threads is reached, the rejection policy will be implemented;
  • If the waiting queue is set to LinkedBlockingQueue unbounded queue, this queue is infinite, and it will never reach the maximum judgment value. What about the number of threads?

如何自定义线程池

可以使用有界队列,自定义线程创建工厂ThreadFactory和拒绝策略handler来自定义线程池

public class ThreadTest {
    public static void main(String[] args) throws InterruptedException, IOException {
        int corePoolSize = 2;
        int maximumPoolSize = 4;
        long keepAliveTime = 10;
        TimeUnit unit = TimeUnit.SECONDS;
        BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(2);
        ThreadFactory threadFactory = new NameTreadFactory();
        RejectedExecutionHandler handler = new MyIgnorePolicy();
       ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit,
                workQueue, threadFactory, handler);
        executor.prestartAllCoreThreads(); // 预启动所有核心线程        
        for (int i = 1; i <= 10; i++) {
            MyTask task = new MyTask(String.valueOf(i));
            executor.execute(task);
        }
        System.in.read(); //阻塞主线程
    }
    static class NameTreadFactory implements ThreadFactory {
        private final AtomicInteger mThreadNum = new AtomicInteger(1);
        @Override
        public Thread newThread(Runnable r) {
            Thread t = new Thread(r, "my-thread-" + mThreadNum.getAndIncrement());
            System.out.println(t.getName() + " has been created");
            return t;
        }
    }

    public static class MyIgnorePolicy implements RejectedExecutionHandler {
        @Override
        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            doLog(r, e);
        }
        private void doLog(Runnable r, ThreadPoolExecutor e) {
            // 可做日志记录等
            System.err.println( r.toString() + " rejected");
//          System.out.println("completedTaskCount: " + e.getCompletedTaskCount());
        }
    }

    static class MyTask implements Runnable {
        private String name;
        public MyTask(String name) {
            this.name = name;
        }
        @Override
        public void run() {
            try {
                System.out.println(this.toString() + " is running!");
                Thread.sleep(3000); //让任务执行慢点
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        public String getName() {
            return name;
        }
        @Override
        public String toString() {
            return "MyTask [name=" + name + "]";
        }
    }
}
Copy after login

运行结果:

What are the four thread pools that come with Java?

其中7-10号线程被拒绝策略拒绝了,1、2号线程执行完后,3、6号线程进入核心线程池执行,此时4、5号线程在任务队列等待执行,3、6线程执行完再通知4、5线程执行

The above is the detailed content of What are the four thread pools that come with Java?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1665
14
PHP Tutorial
1269
29
C# Tutorial
1249
24
Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP vs. Python: Understanding the Differences PHP vs. Python: Understanding the Differences Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP vs. Python: Core Features and Functionality PHP vs. Python: Core Features and Functionality Apr 13, 2025 am 12:16 AM

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

PHP's Impact: Web Development and Beyond PHP's Impact: Web Development and Beyond Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP: The Foundation of Many Websites PHP: The Foundation of Many Websites Apr 13, 2025 am 12:07 AM

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

PHP vs. Python: Use Cases and Applications PHP vs. Python: Use Cases and Applications Apr 17, 2025 am 12:23 AM

PHP is suitable for web development and content management systems, and Python is suitable for data science, machine learning and automation scripts. 1.PHP performs well in building fast and scalable websites and applications and is commonly used in CMS such as WordPress. 2. Python has performed outstandingly in the fields of data science and machine learning, with rich libraries such as NumPy and TensorFlow.

See all articles