`

ThreadPoolExecutor线程池参数详解

 
阅读更多
参考:https://www.cnblogs.com/waytobestcoder/p/5323130.html
https://www.cnblogs.com/bqcoder/p/6089101.html CountDownLatch
//单例线程池一
package ddd;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPool {
	
	private static ThreadPoolExecutor te;
	
	// 核心线程池大小(线程池初始大小);
	private static int SHOPPINGCOREPOOLSIZE = 50;
	// 最大线程池大小;
	private static int SHOPPINGMAXIMUMPOOLSIZE = 50;
	// 线程池中超过corePoolSize数目的空闲线程最大存活时间;
	private static int SHOPPINGKEEPALIVETIME = 5;
	// 线程池队列容量
	private static int SHOPPINGQUEUESIZE = 4;
	
	public static ThreadPoolExecutor getInstance(){
		if(null == te){
			synchronized(ThreadPool.class){
				if(null == te){
					te = new ThreadPoolExecutor(SHOPPINGCOREPOOLSIZE, SHOPPINGMAXIMUMPOOLSIZE, SHOPPINGKEEPALIVETIME, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(SHOPPINGQUEUESIZE));
				}
			}
		}
		return te;
	}
	
}


构造器源码 jdk 1.6.0_43
/**
     * Creates a new <tt>ThreadPoolExecutor</tt> with the given initial
     * parameters and default thread factory and rejected execution handler.
     * It may be more convenient to use one of the {@link Executors} factory
     * methods instead of this general purpose constructor.
     *
     * @param corePoolSize the number of threads to keep in the
     * pool, even if they are idle.
     * @param maximumPoolSize the maximum number of threads to allow in the
     * pool.
     * @param keepAliveTime when the number of threads is greater than
     * the core, this is the maximum time that excess idle threads
     * will wait for new tasks before terminating.
     * @param unit the time unit for the keepAliveTime
     * argument.
     * @param workQueue the queue to use for holding tasks before they
     * are executed. This queue will hold only the <tt>Runnable</tt>
     * tasks submitted by the <tt>execute</tt> method.
     * @throws IllegalArgumentException if corePoolSize or
     * keepAliveTime less than zero, or if maximumPoolSize less than or
     * equal to zero, or if corePoolSize greater than maximumPoolSize.
     * @throws NullPointerException if <tt>workQueue</tt> is null
     */
public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }

参数详解:
corePoolSize :the number of threads to keep in the pool, even if they are idle.
核心线程数:核心线程会一直存活,即使没有任务需要执行 ,即使他们是空闲的。
          当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。
          当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务。

maximumPoolSize: the maximum number of threads to allow in the pool.
最大线程数:线程池中允许的最大线程数。
          当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常。

keepAliveTime: when the number of threads is greater than the core, this is the maximum time that excess idle threads  will wait for new tasks before terminating.
翻译:当线程数量大于核心时,这是多余的空闲线程在终止之前等待新任务的最大时间。
线程池中超过corePoolSize数目的空闲线程最大存活时间;

unit:the time unit for the keepAliveTime argument.
第三个参数keepAliveTime的时间单位

workQueue:the queue to use for holding tasks before they are executed. This queue will hold only the <tt>Runnable</tt> tasks submitted by the <tt>execute</tt> method.

二、ThreadPoolExecutor执行顺序:
     线程池按以下行为执行任务
(1)当线程数小于核心线程数时,创建线程。
(2)当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。
(3)当线程数大于等于核心线程数,且任务队列已满
          a.若线程数小于最大线程数,创建线程
          b.若线程数等于最大线程数,抛出异常,拒绝任务
分享到:
评论

相关推荐

    ThreadPoolExecutor线程池原理及其execute方法(详解)

    ThreadPoolExecutor线程池原理及其execute方法详解 ThreadPoolExecutor是Java并发包中提供的线程池类,用于管理和执行异步任务。ThreadPoolExecutor的执行原理可以分为四个步骤: 1.核心线程池:...

    Java线程池技术详解

    正确选择和配置线程池参数是至关重要的,需要根据系统的硬件资源、并发需求和任务特性进行调整,以实现最佳性能和资源利用率。例如,核心线程数应与系统的并发能力相匹配,最大线程数应考虑到系统能承受的最大并发量...

    线程池相关详解及总结.doc

    建议使用`ThreadPoolExecutor`直接实例化,以便更灵活地调整线程池参数,确保线程池的合理配置。 在实际应用中,线程池常用于处理异步任务,提高系统的响应速度和吞吐量。例如,在调度系统中,任务触发后交给线程池...

    多线程与线程池技术详解(图书配套)

    Java的`java.util.concurrent.ThreadPoolExecutor`是实现线程池的主要类。它包括核心线程数、最大线程数、线程空闲时间、工作队列等参数,可以根据需求灵活调整。线程池不仅可以控制并发量,还能有效地利用系统资源...

    创建Java程序中线程池的详解

    `ExecutorService` 是一个接口,提供了管理和控制线程池的功能,而 `ThreadPoolExecutor` 是其具体实现,可以通过构造函数自定义线程池的参数,如核心线程数、最大线程数、线程存活时间、任务队列类型等。...

    java线程池详解文档

    - **提高系统稳定性**:通过合理配置线程池参数,可以有效防止因线程过多导致系统崩溃的情况。 #### 四、线程池核心类`ThreadPoolExecutor` `ThreadPoolExecutor`是Java中实现线程池功能的核心类,提供了丰富的...

    Python线程池模块ThreadPoolExecutor用法分析

    Python线程池模块`ThreadPoolExecutor`是Python标准库`concurrent.futures`的一部分,它提供了一种方便且高效的方式来管理线程,以便并发地执行多个任务。线程池的概念允许我们预先创建一组线程,然后根据需要分配...

    Java ThreadPoolExecutor的参数深入理解

    三、ThreadPoolExecutor的参数详解 1. corePoolSize:影响线程池中的核心线程数,设置合适的核心线程数可以提高线程池的性能。 2. maximumPoolSize:影响线程池中的最大线程数,设置合适的最大线程数可以避免线程池...

    线程池原理-ThreadPoolExecutor源码解析

    线程池原理-ThreadPoolExecutor源码解析 1.构造方法及参数 2.阻塞对列: BlockingQueue 3.线程工厂: DefaultThreadFactory 4.拒绝策略: RejectedExecutionHandler 5.执行线程 Executor

    jdk自带线程池实例详解

    jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...

    Java 线程池详解,图文并茂.pdf

    Java 线程池详解 Java 线程池是一种高效的线程管理机制,它可以避免频繁创建和销毁线程,从而提高系统性能。线程池的设计思想源于生活,例如工厂的生产流程可以看作是一个线程池。 在 Java 中,线程池的实现类是 ...

    Python定时器线程池原理详解

    Python定时器线程池原理详解主要探讨了如何在Python中实现定时任务以及如何利用线程池来优化多线程执行。在Python中,定时任务通常使用`threading`模块中的`Timer`类来实现。 `Timer`类允许我们设置一个时间间隔...

    Spring boot注解@Async线程池实例详解

    Spring Boot @Async 注解线程池实例详解 1. Spring Boot @Async 注解简介 Spring Boot 提供了 @Async 注解,可以将方法异步化,使得方法的调用者不需要等待方法的执行结果,直接返回,而方法的实际执行将提交给 ...

    java线程池实例详细讲解

    Java线程池的实现主要有`ThreadPoolExecutor`类,它提供了丰富的构造参数来定制线程池的行为: - `corePoolSize`:线程池的基本大小,即当线程池创建后和运行过程中,即使没有任务,也会保持这个数量的线程存活。 -...

    ThreadPoolExecutor运转机制介绍

    ### ThreadPoolExecutor 运转机制详解 #### 一、ThreadPoolExecutor 的基本概念与构造函数解析 在Java并发编程中,`ThreadPoolExecutor` 是一种强大的工具,它可以帮助开发者有效地管理和执行线程。`...

    JAVA线程池例子

    3. **线程池参数详解**: - `corePoolSize`:线程池的基本大小,当线程数小于这个值时,即使工作队列未满,也会创建新线程。 - `maximumPoolSize`:线程池最大大小,超过这个数量的任务将被放入工作队列。 - `...

    android线程池

    七、线程池参数详解 1. 核心线程数:线程池初始化时创建的线程数,即使无任务也会保持这些线程。 2. 最大线程数:线程池允许的最大线程数,超过此数的任务会被放入工作队列。 3. 工作队列:存储等待执行任务的队列...

    JAVA线程池原理实例详解

    JAVA线程池原理实例详解 JAVA线程池是java中的一种高效的线程管理机制,它可以控制线程的创建、销毁和复用,从而提高系统的性能和可靠性。下面我们将详细介绍JAVA线程池的原理、创建、使用方法及相关注意事项。 一...

    java多线程教程之如何使用线程池详解

    Java 多线程教程之如何使用线程池详解 Java 多线程教程中,线程池是一种非常重要的概念。在 Java 中,线程池是指一个线程的集合,可以重复使用这些线程来执行任务。使用线程池可以提高服务器的性能和可扩展性。本文...

    规范使用线程池与底层原理详解.docx

    理解并合理使用线程池是优化并发程序性能的关键,开发者需要根据实际应用需求选择合适的线程池类型,并调整相关参数以达到最佳性能。同时,对于自定义线程池,还可以通过实现`RejectedExecutionHandler`接口来定制...

Global site tag (gtag.js) - Google Analytics