Java线程池简单介绍

本文介绍了Java线程池的概念,强调了线程池在管理资源和提高响应性方面的作用。文章列举了Java中ExecutorService提供的不同类型的线程池,并详细解释了它们的功能,如newFixedThreadPool和ScheduledExecutorService。此外,还探讨了自定义线程池的创建,包括ThreadPoolExecutor构造函数的参数,如corePoolSize、maximumPoolSize和拒绝策略。
摘要由CSDN通过智能技术生成

Java 线程池介绍

一、线程池

线程池,从字面含义来看,是指管理一组同构工作线程的资源池。线程池是与工作队列密切相关的,其中在工作队列中保存了所有等待执行的任务。工作者线程的任务很简单:从工作队列中获取一个任务,执行任务,然后返回线程池并等待下一个任务。

跟数据库连接池相似,如果每一次操作,都要新建一个线程(连接)然后销毁,会对系统资源产生巨大开销,通过线程池(连接池)对线程(连接)进行管理,让一些线程(连接)一直存在,既可以减少新建销毁的资源浪费,也可以提高系统的响应性。

二、Java 中的线程池类

在 Java1.8 中,已经在 Executors 中封装好了几种线程池的静态实现方法,这些方法都是调用统一的线程池构建函数来构建这几种线程池,这几种线程池分别是:

  • newCacheThreadPool:创建一个具有缓存功能的线程池,系统根据需要创建线程,这些线程将会被缓存在线程池中。
  • newFixedThreadPool:创建一个可重用的、具有固定线程数的线程池。
  • newSingleThreadExecutor:创建一个只有单线程的线程池,它相当于调用 newFixedThreadPool 时设置大小为 1.
  • newScheduledThreadPool:创建具有指定线程数的线程池,它可以在指定延迟后执行线程任务。
  • newSingleScheduledThreadPool:创建只有一个线程的线程池,它可以在指定延迟后执行线程任务。
  • newWorkStealingPool:创建持有足够的线程的线程池来支持给定的并行级别,该方法还会使用多个队列来减少竞争。该线程池相当于后台线程池,如果所有前台线程都结束了,线程池中的线程就会自动死亡。

除了具有延迟功能的线程池返回的是 ScheduledExecutorService 类外,其余方法的返回值都是接口 ExecutorService 。

在 Java 中还有一种比较特殊的线程池 ForkJoinPool ,他是 ExecutorService 的一个实现类,主要作用是将一个任务拆分成多个小任务并行计算,然后再合并计算结果,它的线程数量取决于CPU的数量

下面来放张图看看 Java 关于线程的脉络:

uwO2DJ.png

左边是线程池相关的,右边的是 Future 相关的。Future 是对线程的一种包装,可以通过 Future 获取线程的一些信息,比如线程是否运行,线程返回值等。

我们分析一下 ScheduledExecutorService 和 ExecutorService 中的一些方法,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值