一、简介
线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,BlockingQueue<Runnable> workQueue,RejectedExecutionHandler handler)
corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略
一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个 Runnable类型的对象,任务的执行方法就是 Runnable类型对象的run()方法。
当一个任务通过execute(Runnable)方法欲添加到线程池时:
如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。
也就是:处理任务的优先级为:
核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。
当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。
unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。
workQueue我常用的是:java.util.concurrent.ArrayBlockingQueue
handler有四个选择:
ThreadPoolExecutor.AbortPolicy()
抛出java.util.concurrent.RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy()
重试添加当前的任务,他会自动重复调用execute()方法
ThreadPoolExecutor.DiscardOldestPolicy()
抛弃旧的任务
ThreadPoolExecutor.DiscardPolicy()
抛弃当前的任务
分享到:
相关推荐
JAVA线程池介绍以及简单实例,代码加文档 。原始资源连接 https://wenku.baidu.com/view/a3d09d0316fc700abb68fce9.html?from=search
Java线程池是Java并发编程中的重要组成部分,它在多线程编程中扮演着至关重要的角色,有效地管理和调度线程资源,提高了程序的性能和稳定性。本文将深入探讨Java线程池的概念、工作原理以及如何在实际开发中运用。 ...
4. **线程池的介绍及简单实现** - 线程池可以预先创建一定数量的线程,处理多个任务,避免了频繁创建和销毁线程的性能损耗。 - `ThreadPoolExecutor`的构造函数接受核心线程数、最大线程数、线程空闲时间、线程...
Java线程池是一种高效利用系统资源的机制,它允许开发者预先配置一定数量的线程,以便在处理任务时能够快速响应。线程池的核心概念在于避免频繁地创建和销毁线程,这可以显著减少系统开销,提升整体性能。本文将深入...
NULL 博文链接:https://technicalsearch.iteye.com/blog/2008646
### JAVA线程池原理及几种线程池类型的详细介绍 #### 一、线程池的引入背景及重要性 在现代软件开发中,特别是在基于Java的应用程序设计中,线程池技术已经成为提高系统性能和资源利用率的关键手段之一。线程池...
线程池介绍,介绍应用中如何使用线程池,开启线程池。
线程池是并发编程中的一个重要概念,它是一种多线程处理形式,预先创建了一组可重用线程,而不是在需要时才创建新的线程。线程池的主要优点包括资源的有效利用、降低系统资源开销以及提高响应速度。在本篇文章中,...
Java线程池是一种高效管理线程的机制,它克服了直接使用`new Thread()`创建线程的诸多弊端。创建线程池的主要目的是重用已存在的线程,减少新对象的创建和销毁开销,从而提升程序性能。此外,线程池还可以通过控制...
本文将通过一个简单的Demo,介绍如何在Android中使用线程池。 一、线程池概念 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。通过线程池,可以控制运行的线程数量,...
Java线程池是一种高效管理线程的工具,它允许开发者预先创建一组线程,并复用它们来处理任务,从而降低了创建和销毁线程的开销。线程池的使用尤其适用于处理大量短小任务的场景,例如Web服务器、数据库服务器等。在...
ThreadPoolExecutor的使用和Android常见的4种线程池使用介绍
根据摩尔定律(Moore’s law),集成电路晶体管的数量差不多每两年会翻一倍。但是晶体管数量指数级的增长不一定会导致 CPU 性能的指数级增长。处理器制造商花了很多年来提高...线程池可以帮助程序员更好地利用多核 C
Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了流的概念,流是作为一种对数据执行...
下面将详细介绍DELPHI线程池的基本概念、工作原理以及如何在实践中使用。 1. **线程池概念** - **线程**:线程是操作系统分配CPU时间的基本单位,每个线程代表程序中的一个独立执行流。 - **线程池**:是一组预...
通过以上知识点的详细介绍和实际代码示例,文章帮助开发者深入理解Django中异步任务线程池的实现原理,以及如何在实际项目中利用这些原理来提高程序的性能和响应速度。这对于提升大规模数据处理能力、优化用户体验...