×

线程池七大核心参数,线程池七大核心参数执行顺序

前端技术网 前端技术网 发表于2024-02-03 23:12:21 浏览3417 评论0

抢沙发发表评论

一、线程池参数设置原则

1.是需要根据实际情况和需求进行设置的。2.线程池的大小需要根据系统的实际负载、硬件配置等因素进行调整;如果线程数过多,会导致系统负载过高,而如果线程数过少,则可能导致资源浪费。3.在设置线程池的参数时,还需要考虑到任务的性质以及需要的响应时间等因素,例如任务本身耗时较长的话,线程池中的线程数就需要适当增加,以保证任务能够得到及时响应。4.此外,在设置线程池参数时,还需要注意合理使用队列等机制,以便合理分配和管理线程资源,以及尽可能地减少因线程阻塞而导致的资源浪费等问题。

二、线程池的参数的存活时间是干嘛的

线程池的参数存活时间用于设定当线程池中的线程数量超过核心线程数时,空闲线程的最长存活时间。如果线程在指定的时间内仍未被使用,则会被线程池回收,以减少资源的占用。

线程池七大核心参数,线程池七大核心参数执行顺序

这个参数的设置可以根据应用程序的需求来平衡线程池的性能和资源消耗。

适当的存活时间可以避免频繁地创建和销毁线程,提高线程的复用率,从而提升系统的性能和响应速度。

三、Java线程池

多线程是为了能够让计算机资源合理的分配,对于处理不同的任务创建不同的线程进行处理,但是计算机创建一个线程或者销毁一个线程所花费的也是比较昂贵的,有时候需要同时处理的事情比较多,就需要我们频繁的进行线程的创建和销毁,这样花费的时间也是比较多的。为了解决这一问题,我们就可以引用线程池的概念。

所谓线程池就是将线程集中管理起来,当需要线程的时候,可以从线程池中获取空闲的线程,这样可以减少线程的频繁创建与销毁,节省很大的时间和减少很多不必要的操作。

在java中提供了ThreadPoolExecutor类来进行线程的管理,这个类继承于AbstractExecutorService,而AbstractExecutorService实现了ExecutorService接口,我们可以使用ThreadPoolExecutor来进行线程池的创建。

在ThreadPoolExecutor的构造方法中,有多个参数,可以配置不同的参数来进行优化。这个类的源码构造方法为:

线程池七大核心参数,线程池七大核心参数执行顺序

publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueueworkQueue,ThreadFactorythreadFactory,RejectedExecutionHandlerhandler)其中每个参数代表的意义分别为:

corePoolSize:线程池中的核心线程数量,当线程池中当前的线程数小于这个配置的时候,如果有一个新的任务到来,即使线程池中还存在空闲状态的线程,程序也会继续创建一个新的线程放进线程池当中

maximumPoolSize:线程池中的线程最大数量

keepAliveTime:当线程池中的线程数量大于配置的核心线程数量(corePoolSize)的时候,如果当前有空闲的线程,则当这个空闲线程可以存在的时间,如果在keepAliveTime这个时间点内没有新的任务使用这个线程,那么这个线程将会结束,核心线程不会结束,但是如果配置了allowCoreThreadTimeOut=true,则当空闲时间超过keepAliveTime之后,线程也会被结束调,默认allowCoreThreadTimeOut=false,即表示默认情况下,核心线程会一直存在于线程池当中。

unit:空闲线程保持连接时间(keepAliveTime)的时间单位

workQueue:阻塞的任务队列,用来保存等待需要执行的任务。

threadFactory:线程工厂,可以根据自己的需求去创建线程的对象,设置线程的名称,优先级等属性信息。

handler:当线程池中存在的线程数超过设置的最大值之后,新的任务就会被拒绝,可以自己定义一个拒绝的策略,当新任务被拒绝之后,就会使用hander方法进行处理。

在java中也提供了Executors工具类,在这个工具类中提供了多个创建线程池的静态方法,其中包含newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool、newSingleThreadExecutor等。但是他们每个方法都是创建了ThreadPoolExecutor对象,不同的是,每个对象的初始参数值不一样;

四、线程池核心线程和非核心线程区别

1:核心线程和非核心线程的区别主要体现在以下几个方面:1.核心线程一般是线程池创建时就已经存在的线程,它们会始终处于活动状态,即使没有任务需要执行,也不会被回收。而非核心线程则根据实际任务的需求进行动态创建和销毁。2.核心线程可以保证任务的立即执行,无需等待额外的线程创建过程。而非核心线程则需要额外的时间去创建和启动,可能会导致任务的执行有一定的延迟。3.在默认情况下,当核心线程处于空闲状态时,它们不会被销毁,以便快速响应新任务的到来。而非核心线程在任务执行完毕后,如果一定时间内没有新的任务到来,就会被释放。4.线程池可以通过参数设置来调整核心线程和非核心线程的数量。核心线程数量的设置影响着线程池的基本容量,而非核心线程数量的设置则影响着线程池的最大容量。总的来说,核心线程和非核心线程在线程池中的角色和行为是有所区别的,这种设置可以根据具体的任务需求和性能要求来灵活调整。

好了,关于线程池七大核心参数和线程池七大核心参数执行顺序的问题到这里结束啦,希望可以解决您的问题哈!