JAVA多线程基础 之十一 线程池

Java线程池是常用的并发框架,提供降低资源消耗、提高响应速度和线程管理。本文介绍了线程池的作用、分类,重点关注ThreadPoolExecutor,包括其核心线程数、最大线程数、线程存活时间和四种线程池创建方式。通过实例展示了newFixedThreadPool、newScheduledThreadPool、newCachedThreadPool和newSingleThreadExecutor的使用,并分析了线程池的运行原理和配置策略。合理设置线程池大小要考虑任务性质、优先级、执行时间和依赖性等因素。
摘要由CSDN通过智能技术生成

什么是线程池

Java中的线程池是运用景最多的并框架,几乎所有需要异步或并发执行任的程序
都可以使用线程池。在开发过程中,合理地使用线程池能够带3个好
第一:降低源消耗。通重复利用已建的线程降低线建和造成的消耗。
第二:提高响速度。当任到达,任可以不需要等到线建就能立即行。
第三:提高线程的可管理性线程是稀缺源,如果无限制地建,不会消耗系统资源,
会降低系定性,使用线程池可以一分配、调优控。但是,要做到合理利用
线程池,必须对实现原理了如指掌。

线程池作用

线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。

如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止。

线程池的分类

ThreadPoolExecutor

Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池。在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在JDK1.5后,有了很大的改善。JDK1.5之后加入了java.util.concurrent包,java.util.concurrent包的加入给予开发人员开发并发程序以及解决并发问题很大的帮助。这篇文章主要介绍下并发包下的Executor接口,Executor接口虽然作为一个非常旧的接口(JDK1.5 2004年发布),但是很多程序员对于其中的一些原理还是不熟悉,因此写这篇文章来介绍下Executor接口,同时巩固下自己的知识。如果文章中有出现错误,欢迎大家指出。

Executor框架的最顶层实现是ThreadPoolExecutor类,Executors工厂类中提供的newScheduledThreadPool、newFixedThreadPool、newCachedThreadPool方法其实也只是ThreadPoolExecutor的构造函数参数不同而已。通过传入不同的参数,就可以构造出适用于不同应用场景下的线程池,那么它的底层原理是怎样实现的呢,这篇就来介绍下ThreadPoolExecutor线程池的运行过程。

/**

 * Creates a new {@code ThreadPoolExecutor} 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, unless {@code allowCoreThreadTimeOut} is set

 * @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 {@code keepAliveTime} argument

 * @param workQueue the queue to use for holding tasks before they are

 *        executed.  This queue will hold only the {@code Runnable}

 *        tasks submitted by the {@code execute} method.

 * @throws IllegalArgumentException if one of the following holds:<br>

 *         {@code corePoolSize < 0}<br>

 *         {@code keepAliveTime < 0}<br>

 *         {@code maximumPoolSize <= 0}<br>

 *         {@code maximumPoolSize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值