Java 线程池的实现原理
2022/5/24 1:22:42
本文主要是介绍Java 线程池的实现原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
线程的几种状态
public enum State {
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
- NEW,新建状态。尚未启动的线程的状态。
- RUNNABLE,可运行状态。处于
RUNNABLE
状态的线程正在 JVM 中执行,但它可能正在等待来自操作系统(如处理器)的其他资源。 - BLOCKED,阻塞状态。处于
BLOCKED
状态的线程正在等待监视器锁以便进入同步代码块或同步方法,或者在调用Object.wait()方法后准备重入同步代码块或同步方法。 - WAITING,等待状态。处于
WAITING
状态的线程正在等待另一个线程执行特定的动作,例如需要另一个线程调用Object.notify()
或者Object.notifyAll()
进行唤醒。当调用以下无参方法时,线程会进入WAITING
状态: Object.wait()
Thread.join()
LockSupport.park()
- TIMED_WAITING,具有指定等待时间的线程状态。当调用以下具有指定正等待时间的方法时,线程会进入
TIMED_WAITING
状态: Thread.sleep(millis)
Object.wait(timeout)
Thread.join(millis)
LockSupport.parkNanos(blocker, nanos)
LockSupport.parkUntil(blocker, deadline)
- TERMINATED,终止状态。当线程执行完成后,处于
TERMINATED
状态。
线程池的实现 ThreadPoolExecutor
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}
- corePoolSize,核心线程数,表示要保留在线程池中的线程数,即使它们处于空闲状态,如果设置了
allowCoreThreadTimeOut
参数,则该参数的最小值可以为零。 - maximumPoolSize,最大线程数,表示线程池中允许同时存在的最大线程数量。
- keepAliveTime,存活时间,当线程池中的线程数量大于
corePoolSize
时,该参数表示多余的空闲线程在终止之前等待新任务的最长时间。也就是说,如果多余的空闲线程在等待时间超过keepAliveTime
之后仍没有收到任务,则自动销毁。 - unit,时间单位,表示
keepAliveTime
参数的时间单位。 - workQueue,工作队列,在任务被执行前,该队列用于保存任务。该队列只能持有被execute方法提交的Runnable类型的任务。
- threadFactory,线程工厂,执行器创建新线程时使用的工厂。
- handler,拒绝策略,当达到线程数量边界和队列容量而阻止执行时使用的处理策略。
这篇关于Java 线程池的实现原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13怎么通过 JavaScript 或其他编程语言来实现监听屏幕高度变化功能?-icode9专业技术文章分享
- 2024-11-12聊聊我们那些年用过的表达式引擎组件
- 2024-11-12让项目数据更有说服力:五款必备数据可视化管理工具推荐
- 2024-11-12人到一定年纪,要学会远离多巴胺
- 2024-11-12解读:精益生产管理的目的是什么?如何操作?
- 2024-11-12Sku预研作业
- 2024-11-12文心一言API密钥:分步申请指南
- 2024-11-12初学者指南:轻松掌握后台交互
- 2024-11-12从零开始学习:封装基础知识详解
- 2024-11-12JSON对象入门教程:轻松掌握基础用法