讲讲Java线程池参数?为什么需要核心线程,它的设计目的?

2024-04-18 17:52

本文主要是介绍讲讲Java线程池参数?为什么需要核心线程,它的设计目的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 线程池七大参数

1.corePoolSize: 核心线程数

2.maximumPoolSize: 最大线程数

3.keepAliveTime: 空闲线程的存活时间

4.unit: keepAliveTime的时间单位

5.workQueue: 任务队列

6.threadFactory: 线程工厂

7.handler: 拒绝策略

corePoolSize: 核心线程数

这是线程池中始终保持活动的线程数,即使它们是空闲的。线程池初始化时,默认没有线程,线程将按需创建,直到线程数达到核心线程数。

maximumPoolSize: 最大线程数

当前线程数达到corePoolSize后,如果继续有任务被提交到线程池,会将任务缓存到工作队列中,待核心线程有空闲时对队列中的任务进行处理。如果队列也已满,则会去创建一个新线程来出来处理。线程池不会无限制的去创建新线程,它会有一个最大线程数量的限制,这个数量即由maximunPoolSize指定。

keepAliveTime: 空闲线程的存活时间

当线程池中线程数量超过核心线程数时,这些多余(非核心)的线程若在指定的时间内没有任务执行,将会被终止以减少资源消耗。

unit: keepAliveTime的时间单位

指定keepAliveTime参数的时间单位,如TimeUnit.SECONDS (秒)、TimeUnit.MILLISECONDS (毫秒)等。

workQueue: 任务队列

用于保存等待执行的任务的阻塞队列。常见的有LinkedBlockingQueue、SynchronousQueue、ArrayBlockingQueue等。

threadFactory: 线程工厂

用于创建新线程的工厂。可以通过提供一个ThreadFactory对象自定义线程的创建方式,如设置线程名字、优先级等。

handler: 拒绝策略

当线程池和工作队列都满了时,新提交的任务的处理策略。

常见的拒绝策略包括:

ThreadPoolExecutor.AbortPolicy (抛出异常)

ThreadPoolExecutor.DiscardPolicy (忽略新任务)

ThreadPoolExecutor.DiscardOldestPolicy (丢弃队列最前面的任务)

ThreadPoolExecutor.CallerRunsPolicy (在调用者的线程中运行新任务)。

 为什么需要核心线程,它的设计目的?

提供一个稳定的线程环境,确保线程池在任何时候都有基础的线程可用来执行任务,不必频繁地创建和销毁线程。

1.提高响应速度:通过保持核心线程始终运行,任务可以立即得到执行,无需等待新线程的创建。
2.减少线程创建和销毁的开销:频繁的线程创建和销毁不仅会消耗系统资源,还会增加系统的负担和复杂度。
3.更好的资源管理:核心线程数提供了一种配置机制,使得系统管理员或开发人员可以根据实际硬件和应用需求调整线程池的基本规模。

这篇关于讲讲Java线程池参数?为什么需要核心线程,它的设计目的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915479

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory