线程池

五种状态:

java 线程池任务满了 java线程池shutdownnow_java 线程池任务满了


java 线程池任务满了 java线程池shutdownnow_java_02


shutdown():不在接收任务,但是会将队列与已经执行的任务执行完。

shutdownNow():不在接收任务,并且不在执行任何任务,中断正在执行任务。

为什么需要线程池

1、线程的复用,降低线程的创建与分配所需的时间

不同线程池的实现方式

ThreadPoolExecutor

public ThreadPoolExecutor(
	int corePoolSize, //核心线程数
	int maximumPoolSize, //最大线程数
	long keepAliveTime, //时间
	TimeUnit unit, //时间单位
	BlockintQueue<Runnable> workQueue, //队列
	ThreadFactory threadFactory, //线程工厂
	RejectedExecutionHandler handler //拒绝策略
){
核心线程数

在使用线程池的时候已经创建好的线程

最大线程数

最多能创建的线程数量

时间

设置非核心线程的销毁时间

时间单位

时间的单位

队列

排队执行

线程工厂

创建线程

拒绝策略

队列满了,就直接拒绝入队列

1、newCachedThreadPool() 的参数设置

java 线程池任务满了 java线程池shutdownnow_java_03

Integer.MAX_VALUE = 2的31次方 - 1 ; //个非核心线程
SynchronousQueue //同步队列

步骤:
创建new Runnable
-> 给核心线程(核心线程为0,无法接手)
-> 将任务送入队列中(同步队列,进一个任务出一个任务)
-> 给到非核心线程(创建线程处理任务)

即:
有多少个任务,就创建多少个线程
有线程复用,在线程执行完之后,还有任务需要执行,就会进行复用

2、newFixedThreadPool(10);

java 线程池任务满了 java线程池shutdownnow_开发语言_04


(非核心员工)= 核心线程数(CorePoolSize) - 最大线程数(MaximumPoolSize)

java 线程池任务满了 java线程池shutdownnow_java_05

3、newSingleThreadExecutor();

java 线程池任务满了 java线程池shutdownnow_程序人生_06

大厂不推荐使用以上工具类,推荐根据具体需求自定义线程池
任务提交优先级

java 线程池任务满了 java线程池shutdownnow_程序人生_07

任务执行优先级

1、核心线程
2、非核心线程
3、队列存取

线程

线程方法调用的区别

1、new ThreaDeao(),run();
2、new ThreaDeao().start();
通过打断点或者打印当前线程信息可以知道
其中1是在main线程中执行,2是在子线程中执行

线程模型

java 线程池任务满了 java线程池shutdownnow_java 线程池任务满了_08


java虚拟机使用的是 KLT