Java多线程10—线程池框架

本文详细介绍了Java的线程池框架,包括Executor、ExecutorService、ThreadPoolExecutor和ScheduledThreadPoolExecutor。线程池通过减少线程创建的开销,提供任务控制和生命周期管理,提升系统效率。文中讲解了线程池的工作原理,如任务队列、拒绝策略和线程池的构造方法。还讨论了线程池的3种类型:newCachedThreadPool、newFixedThreadPool和newScheduledThreadPool,以及它们各自的特点和应用场景。
摘要由CSDN通过智能技术生成

1. 线程池框架

在这里插入图片描述

1.1 Executor

在通常情况下,我们使用多线程首先需要定义任务并且手动执行它,而在JDK1.5中提供了线程池框架来解耦任务和任务的执行

new Thread(new Runnable()).start();

// 线程池
public interface Executor{
   
    void execute(Runnable command);	// 注入方法,线程池管理执行
}

因此在线程池内部,可以对任务的执行做多种扩展,无论是同步异步,还是增强检验。

1.2 ExecutorService

ExecutorService在Executor的基础上进行了增强,包括对任务的控制、自身生命周期的管理。主要包括:

  • 关闭执行器,禁止任务的提交
  • 监视执行器的状态
  • 提供对异步任务的支持:通过引入Future对象提供异步支持(支持异步下线程同步),前面讲过
  • 提供对批处理任务的支持

1.3 ThreadPoolExecutor

很复杂,不想看,也没时间,下次有空再来看吧。

#核心和最大线程池大小
ThreadPoolExecutor会根据corePoolSize和maximumPoolSize设置的边界来自动调整线程池的大小
(getPoolSize())。当一个任务通过execute(java.lang.Runnable)提交后,如果线程池里面的
线程小于corePoolSize,将会重新创建一个新的线程,即使线程池中有线程是idle状态。如果线程池中的
线程数量大于corePoolSize但是小于maximumPoolSize,只有当队列满了之后才会创建新的线程。如果把
corePoolSize和maximumPoolSize设置为一样,那么将会创建一个固定大小的线程池,如果设置
maximumPoolSize为一个基本无界的值,例如Integer.MAX_VALUE,将允许线程池容纳任意数量的并发
任务(实际上考虑到系统的内存和资源是有限的,不可能设置任意大小的线程数)。

#按需建设
默认情况下,即使是核心线程最初也是在新任务到达时创建和启动的,有2种方法提前启动核心线程池,用
重写的prestartCoreThread()或者prestartAllCoreThreads()方法;用一个非空队列去预启动线程

#创建新线程
新线程通过ThreadFactory来创建的。如果没有特别说明,采用 Executors.defaultThreadFactory(),
创建的线程都是相同的ThreadGroup,并且有着相同的优先级NORM_PRIORITY和非守护优先级状态。通过提供
不同的ThreadFactory,你可以更改线程的名称,线程组,优先级和守护进程状态等。如果ThreadFactory
在通过从newThread返回null请求时无法创建线程,执行器将会继续,但是不能执行任何任务。线程应该有
线程应该拥有“modifyThread”运行时权限,如果线程池中的工作线程或其它线程不具有此权限,服务可能会降
级:配置更改可能无法即时生效,并且关闭池可以保持可以终止但未完成的状态。

#队列
任意 BlockingQueue队列可以用来转移并保留提交的任务,此队列的使用与池大小调节相互作用。
如果运行的线程少于corePoolSize,那么Executor总是喜欢添加新线程而不是放入队列。
如果运行的线程大于corePoolSize,那么Executor总是喜欢放入队列而不是创建新线程。
如果请求无法排队,则会创建一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值