多线程-线程池(队列-最大线程数-核心线程数)

本文深入探讨了Java中线程池的使用与管理,包括固定大小、缓存、单线程及定时线程池的创建与特性。解析了线程池的工作流程,如任务分配、阻塞队列机制及拒绝策略,帮助读者理解线程池如何优化资源利用,提高并发性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java 多线程:
一般通过继承Thread类,实现Runnable接口,实现Callable接口,以及线程池。
这里主要是讲解线程池:
通过线程池主要是创建以下4种类型的线程池。
工具类 : Executors
ExecutorService newFixedThreadPool() : 创建固定大小的线程池
ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
ExecutorService newSingleThreadExecutor() : 创建单个线程池。线程池中只有一个线程
ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时的执行任务。
他们之间的区别主要是:缓存队列-核心线程数-最大线程数之间的关系。
当需要加入进程时:
(1)当前线程数小于核心线程数,当前线程直接运行。
(2)当前线程数大于核心线程数,当前线程会加入到阻塞队列中,
(3)此时阻塞队列未满,直接加入,等待机会运行。
(4) 此时阻塞队列已满,但此时线程数小于最大线程数,则直接创建线程运行。
(5)此时线程数大于等于最大线程数,则实行线程池自定义的拒绝策略。
线城池的拒绝策略(四种):
AbortPolicy — 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException异常
CallerRunsPolicy — 当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。
DiscardOldestPolicy — 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
DiscardPolicy — 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值