扫码关注公众号

java线程池考点之核心线程数
06-01
259观看
01

请列举一下启动线程有哪几种方式,之后再说明一下线程池的种类都有哪些?

要启动的可以分为两类:返回结果和不返回结果。对于这两种,也分别有两种启动线程的方式:1)继承Thread类,重载run()2)实现Runnable接口,实现run()3)实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的线程常用方法:1.newCachedThreadPool()2.newFixedThreadPool(intnThreads)3.newSingleThreadExecutor()4.newScheduleThreadPool()5.newWorkStealingPool(intparallelism)

来自:多线程和线程池-线程池
02

创建线程池的几个核心构造参数

//Java线程池的完整构造函数publicThreadPoolExecutor(intcorePoolSize,//线程池长期维持的最小线程数,即使线程处于Idle状态,也不会回收。intmaximumPoolSize,//线程数的上限longkeepAliveTime,//线程最大生命周期。TimeUnitunit,//时间单位BlockingQueue<Runnable>workQueue,//任务队列。当线程池中的线程都处于运行状态,而此时任务数量继续增加,则需要一个容器来容纳这些任务,这就是任务队列。ThreadFactorythreadFactory,//线程工厂。定义如何启动一个线程,可以设置线程名称,并且可以确认是否是后台线程等。RejectedExecutionHandlerhandler//拒绝任务处理器。由于超出线程数量和队列容量而对继续增加的任务进行处理的程序。)

来自:多线程和线程池-线程池
03

Java线程池的工作流程

线程池中的执行流程:(1)当线程数小于核心线程数的时候,使用核心线程数。(2)如果核心线程数小于线程数,就将多余的线程放入任务队列(阻塞队列)中(3)当任务队列(阻塞队列)满的时候,就启动最大线程数.(4)当最大线程数也达到后,就将启动拒绝策略。

来自:多线程和线程池-线程池
04

java线程池里核心线程数和最大线程数的区别是什么?

这道题考查的是线程池的运行策略,要理解两个参数:corePoolSize:核心线程数;maximunPoolSize:最大线程数每当有新的任务到线程池时,第一步:先判断线程池中当前线程数量是否达到了corePoolSize,若未达到,则新建线程运行此任务,且任务结束后将该线程保留在线程池中,不做销毁处理,若当前线程数量已达到corePoolSize,则进入下一步;第二步:判断工作队列(workQueue)是否已满,未满则将新的任务提交到工作队列中,满了则进入下一步;第三步:判断线程池中的线程数量是否达到了maxumunPoolSize,如果未达到,则新建一个工作线程来执行这个任务,如果达到了则使用饱和策略来处理这个任务。注意:在线程池中的线程数量超过corePoolSize时,每当有线程的空闲时间超过了keepAliveTime,这个线程就会被终止。直到线程池中线程的数量不大于corePoolSize为止。

来自:多线程和线程池-线程池
课程
专栏
Java线程池的使用
线程本身是把双刃剑,我们需要知道它的利弊,才能在实际系统中游刃有余地运用。
简书
Java
线程池
线程池,这一篇或许就够了
有空闲线程则复用空闲线程,若无空闲线程则新建线程
简书
线程池
击穿线程池面试题:3大方法,7大参数,4种拒绝策略
csdn
线程池面试题一般会怎么问?线程池面试题总结及答案整理
csdn
java语言-多线程和线程池-线程池
4专栏
1课程
4 试题