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

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 — 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
线程池是一种管理和复用线程的机制,它可以提高多线程应用程序的性能和效率。在线程池中,核心最大线程是两个重要的参核心(Core Pool Size)指的是线程池中保持活动状态的线程量。当有新的任务提交到线程池时,如果核心线程还没有达到设定的值,线程池会创建新的线程来执行任务,即使有其他空闲线程可用。 最大线程(Maximum Pool Size)指的是线程池能够容纳的最大线程量。当有新的任务提交到线程池时,如果核心线程已满且工作队列也已满,线程池会创建新的线程来执行任务,直到达到最大线程。超过最大线程的任务会根据线程池的拒绝策略进行处理。 区别在于,核心线程池一直保持的活动线程量,即使这些线程处于空闲状态。而最大线程线程池能够容纳的最大量,包括了空闲和正在执行任务的线程。当任务量超过核心时,最大线程的设置决定了是否创建新的线程来执行任务。 合理地设置核心最大线程对于线程池的性能和资源管理非常重要。如果设置的核心过小,可能会导致任务排队等待执行,影响性能。如果设置的最大线程过大,可能会消耗过多的系统资源,甚至引起系统崩溃。因此,需要根据具体的应用场景和系统资源情况来进行调整和优化。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值