Java 线程与线程池

线程池

五种状态:
在这里插入图片描述
在这里插入图片描述
shutdown():不在接收任务,但是会将队列与已经执行的任务执行完。
shutdownNow():不在接收任务,并且不在执行任何任务,中断正在执行任务。

为什么需要线程池

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

不同线程池的实现方式

ThreadPoolExecutor

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

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

最大线程数

最多能创建的线程数量

时间

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

时间单位

时间的单位

队列

排队执行

线程工厂

创建线程

拒绝策略

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

1、newCachedThreadPool() 的参数设置

在这里插入图片描述

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

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

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

2、newFixedThreadPool(10);

在这里插入图片描述
(非核心员工)= 核心线程数(CorePoolSize) - 最大线程数(MaximumPoolSize)
在这里插入图片描述

3、newSingleThreadExecutor();

在这里插入图片描述

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

在这里插入图片描述

任务执行优先级

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

线程

线程方法调用的区别

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

线程模型

在这里插入图片描述
java虚拟机使用的是 KLT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值