- 浏览: 91859 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (148)
- 全文检索 (1)
- java (29)
- xml (2)
- json (2)
- redis springmvc (1)
- Redis (5)
- 开发常识 (1)
- tomcat (2)
- 单元测试Junit (2)
- 设计模式 (2)
- spring (10)
- jvm (2)
- eclipse (4)
- echart (1)
- mybatis (1)
- mysql (3)
- web (1)
- js (2)
- PL/SQL (2)
- 其他 (1)
- 人生 (1)
- 安全 (2)
- jsp (2)
- 硬件电脑 (1)
- linux (3)
- git (10)
- oracle (8)
- ant (1)
- maven (2)
- 正则表达式 (2)
- chrome (1)
- 面试 (6)
- 多线程 (19)
- bug (11)
- java工具类 (3)
- 算法 (1)
- bug,git (1)
- shell (2)
- springmvc (2)
- Java8 (1)
- 消息队列-rocketmq (1)
- es (1)
- dubbo (0)
- spring cloud (0)
- hashmap (0)
- springboot (1)
- velocity (0)
参考:https://www.cnblogs.com/waytobestcoder/p/5323130.html
https://www.cnblogs.com/bqcoder/p/6089101.html CountDownLatch
构造器源码 jdk 1.6.0_43
参数详解:
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.若线程数等于最大线程数,抛出异常,拒绝任务
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.若线程数等于最大线程数,抛出异常,拒绝任务
发表评论
-
解决线程同步问题的思路
2018-07-31 16:35 420线程同步机制 操作系统中实现线程同步有一种工 ... -
发送线程与接收线程 速率一致
2018-08-07 09:17 385package com.jbx.xiezuo; /* ... -
线程间的协作关系与线程同步
2018-07-30 16:21 5321.线程间的协作关系 当一个进程中的多个线程为完成同 ... -
带互斥锁的并发线程执行流程
2018-07-30 12:38 453... -
线程间的竞争关系与线程互斥
2018-07-30 11:19 673线程间的竞争关系与线 ... -
线程的同步机制
2018-07-17 11:31 387线程的同步机制 (一) ... -
3个线程,A,B,C,这三个线程分别只能打印 “a”,“b”,“c”,怎么让这三个线程依次打印“abc"
2018-07-17 11:19 352package com.jbx.thread; /* ... -
定时器与图形动画设计
2018-07-17 11:15 0动画(animation) 都是利用人眼的视 ... -
线程分类
2018-07-17 09:10 328线程分类: 线程可分为用户线程(user thread) ... -
线程优先级
2018-07-17 09:08 362Java提供10个等级的线程优先级,分别用1~10表示,优先级 ... -
设计滚动字演示线程状态及改变方法
2018-07-16 16:17 307本例演示线程对象的生 ... -
线程对象的生命周期
2018-07-16 11:28 363线程对象的生命周期 1.Thread.State类声明的线程状 ... -
声明实现Runnable接口的奇数/偶数序列线程
2018-07-11 14:02 429package com.jbx.thread; ... -
声明继承Thread类的奇数/偶数序列线程
2018-07-10 23:58 422package com.jbx.com; /** ... -
Java的线程对象Runnable接口和Thread类
2018-07-10 21:42 402Java支持内置的多线程机制。 Java语言包中的Runnab ... -
并发程序设计
2018-07-09 17:22 277并发程序设计 1.顺序程 ... -
线程介绍
2018-07-09 16:55 299线程 1.引入线程机制的 ... -
进程介绍
2018-07-09 15:38 379进程 进程的定义和属性 进程是一个可并发执行的 ... -
多线程
2018-07-09 14:31 314...
相关推荐
ThreadPoolExecutor线程池原理及其execute方法详解 ThreadPoolExecutor是Java并发包中提供的线程池类,用于管理和执行异步任务。ThreadPoolExecutor的执行原理可以分为四个步骤: 1.核心线程池:...
正确选择和配置线程池参数是至关重要的,需要根据系统的硬件资源、并发需求和任务特性进行调整,以实现最佳性能和资源利用率。例如,核心线程数应与系统的并发能力相匹配,最大线程数应考虑到系统能承受的最大并发量...
建议使用`ThreadPoolExecutor`直接实例化,以便更灵活地调整线程池参数,确保线程池的合理配置。 在实际应用中,线程池常用于处理异步任务,提高系统的响应速度和吞吐量。例如,在调度系统中,任务触发后交给线程池...
Java的`java.util.concurrent.ThreadPoolExecutor`是实现线程池的主要类。它包括核心线程数、最大线程数、线程空闲时间、工作队列等参数,可以根据需求灵活调整。线程池不仅可以控制并发量,还能有效地利用系统资源...
`ExecutorService` 是一个接口,提供了管理和控制线程池的功能,而 `ThreadPoolExecutor` 是其具体实现,可以通过构造函数自定义线程池的参数,如核心线程数、最大线程数、线程存活时间、任务队列类型等。...
- **提高系统稳定性**:通过合理配置线程池参数,可以有效防止因线程过多导致系统崩溃的情况。 #### 四、线程池核心类`ThreadPoolExecutor` `ThreadPoolExecutor`是Java中实现线程池功能的核心类,提供了丰富的...
Python线程池模块`ThreadPoolExecutor`是Python标准库`concurrent.futures`的一部分,它提供了一种方便且高效的方式来管理线程,以便并发地执行多个任务。线程池的概念允许我们预先创建一组线程,然后根据需要分配...
三、ThreadPoolExecutor的参数详解 1. corePoolSize:影响线程池中的核心线程数,设置合适的核心线程数可以提高线程池的性能。 2. maximumPoolSize:影响线程池中的最大线程数,设置合适的最大线程数可以避免线程池...
线程池原理-ThreadPoolExecutor源码解析 1.构造方法及参数 2.阻塞对列: BlockingQueue 3.线程工厂: DefaultThreadFactory 4.拒绝策略: RejectedExecutionHandler 5.执行线程 Executor
jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...
Java 线程池详解 Java 线程池是一种高效的线程管理机制,它可以避免频繁创建和销毁线程,从而提高系统性能。线程池的设计思想源于生活,例如工厂的生产流程可以看作是一个线程池。 在 Java 中,线程池的实现类是 ...
Python定时器线程池原理详解主要探讨了如何在Python中实现定时任务以及如何利用线程池来优化多线程执行。在Python中,定时任务通常使用`threading`模块中的`Timer`类来实现。 `Timer`类允许我们设置一个时间间隔...
Spring Boot @Async 注解线程池实例详解 1. Spring Boot @Async 注解简介 Spring Boot 提供了 @Async 注解,可以将方法异步化,使得方法的调用者不需要等待方法的执行结果,直接返回,而方法的实际执行将提交给 ...
Java线程池的实现主要有`ThreadPoolExecutor`类,它提供了丰富的构造参数来定制线程池的行为: - `corePoolSize`:线程池的基本大小,即当线程池创建后和运行过程中,即使没有任务,也会保持这个数量的线程存活。 -...
### ThreadPoolExecutor 运转机制详解 #### 一、ThreadPoolExecutor 的基本概念与构造函数解析 在Java并发编程中,`ThreadPoolExecutor` 是一种强大的工具,它可以帮助开发者有效地管理和执行线程。`...
3. **线程池参数详解**: - `corePoolSize`:线程池的基本大小,当线程数小于这个值时,即使工作队列未满,也会创建新线程。 - `maximumPoolSize`:线程池最大大小,超过这个数量的任务将被放入工作队列。 - `...
七、线程池参数详解 1. 核心线程数:线程池初始化时创建的线程数,即使无任务也会保持这些线程。 2. 最大线程数:线程池允许的最大线程数,超过此数的任务会被放入工作队列。 3. 工作队列:存储等待执行任务的队列...
JAVA线程池原理实例详解 JAVA线程池是java中的一种高效的线程管理机制,它可以控制线程的创建、销毁和复用,从而提高系统的性能和可靠性。下面我们将详细介绍JAVA线程池的原理、创建、使用方法及相关注意事项。 一...
Java 多线程教程之如何使用线程池详解 Java 多线程教程中,线程池是一种非常重要的概念。在 Java 中,线程池是指一个线程的集合,可以重复使用这些线程来执行任务。使用线程池可以提高服务器的性能和可扩展性。本文...
理解并合理使用线程池是优化并发程序性能的关键,开发者需要根据实际应用需求选择合适的线程池类型,并调整相关参数以达到最佳性能。同时,对于自定义线程池,还可以通过实现`RejectedExecutionHandler`接口来定制...