编程语言
首页 > 编程语言> > Java学习(十五)-线程与线程池学习(Thread与ThreadPoolExecutor)

Java学习(十五)-线程与线程池学习(Thread与ThreadPoolExecutor)

作者:互联网

一、Thread

Java创建线程Thread的三种方式

1、通过继承Thread类创建线程
2、通过实现Runnable接口来创建线程
3、通过实现Callable接口来创建线程
  1. 有返回值:Runnable是执行工作的独立任务,但是它不返回任何值。如果你希望任务在完成的能返回一个值,那么可以实现Callable接口而不是Runnable接口

二、ThreadPoolExecutor

2.1、线程池的概念

  1. 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。
  2. 使用线程池可以带来一系列好处:
    • 降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。
    • 提高响应速度:任务到达时,无需等待线程创建即可立即执行。
    • 提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。
    • 提供更多更强大的功能:线程池具备可拓展性,允许开发人员向其中增加更多的功能。比如延时定时线程池ScheduledThreadPoolExecutor,就允许任务延期执行或定期执行。

2.2、ThreadPoolExecutor的使用

 * corePoolSize: 线程池维护线程的最少数量
 * maximumPoolSize:线程池维护线程的最大数量
 * keepAliveTime:非核心线程最大存活时长, 线程池维护线程所允许的空闲时间
 * unit: 线程池维护线程所允许的空闲时间的单位
 * workQueue: 线程池所使用的缓冲队列
 * handler: 线程池对拒绝任务的处理策略
// 五个参数的构造函数
public ThreadPoolExecutor(int corePoolSize,//核心线程数
                          int maximumPoolSize,//最大线程数
                          long keepAliveTime,//非核心线程最大存活时长
                          TimeUnit unit,//时长单位
                          BlockingQueue<Runnable> workQueue)//阻塞队列,存放着等待执行的线程任务

// 六个参数的构造函数-1
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory)//创建线程的工厂

// 六个参数的构造函数-2
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          RejectedExecutionHandler handler)//拒绝策略,当线程池无法再接受任务时调用

// 七个参数的构造函数
public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)

2.3、使用规范

2.4、四种常见线程池设置

1、Executors类中提供了几个静态方法实现了创建线程池
2、newCachedThreadPool与newFixedThreadPool区别

参考文档:
https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
https://blog.csdn.net/qq_41135605/article/details/11445310

标签:Java,非核心,Thread,队列,corePoolSize,任务,线程,ThreadPoolExecutor
来源: https://blog.csdn.net/qianwenjun_19930314/article/details/121395511