java线程池面试题_java之线程池面试题

java线程池面试题_java之线程池面试题面试官:线程池有哪些?分别的作用是什么?常用的线程池有:newSingleThreadExecutornewFixedThreadExecutornewCacheThreadExecutornewScheduleThreadExecutor1、newSingleThreadExecutor:单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务;2、newFixedThreadExe…

大家好,又见面了,我是你们的朋友全栈君。

面试官:线程池有哪些?分别的作用是什么?

常用的线程池有:

newSingleThreadExecutor

newFixedThreadExecutor

newCacheThreadExecutor

newScheduleThreadExecutor

1、newSingleThreadExecutor:

单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务;

2、newFixedThreadExecutor:

固定数量的线程池,每提交一个任务就是一个线程,直到线程达到线程池的最大数量,然后后面进入等待队列直到前面的任务才继续执行;

3、newCacheThreadExecutor:

可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般 是60秒无执行)的线程,当有任务时,会添加新线程来执行;

4、newScheduleThreadExecutor:

大小无限制的 线程池,支持定时和周期性的执行线程。

ThreadPoolExecutor解说:

ThreadPoolExecutor是上面几个线程池底层的实现,封装了一层线程类worker,在运行的时候执行完自己的线程后主动去队列中取下一条线程去执行。

其中完整的构造方法是:

public ThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,

TimeUnit unit,

BlockingQueueworkQueue,

ThreadFactory threadFactory,

RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize<= 0 ||maximumPoolSize< corePoolSize ||keepAliveTime< 0)throw newIllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw newNullPointerException();this.corePoolSize =corePoolSize;this.maximumPoolSize =maximumPoolSize;this.workQueue =workQueue;this.keepAliveTime =unit.toNanos(keepAliveTime);this.threadFactory =threadFactory;this.handler =handler;

}

corePoolSize:线程池中所保存的线程数,包括空闲线程;

maximumPoolSize:线程池中允许的最大线程数;

keepAliveTime:线程存活时间,当超过keepAliveTime的时候后还无法获取新的任务,则返回null;

unit:keepAliveTime参数的时间单位;

workQueue:执行前用于保持任务的队列,此队列仅保持由execute方法提交的Runnable任务;

threadFactory:执行程序创建新线程时使用的工厂;

handler:由于超出线程范围和队列容量而使用执行被阻塞时所使用的处理策略;

拒绝策略RejectedExecutionHandler有哪些,分别有什么作用:

AbortPolicy:该策略是线程池默认策略;如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。

DiscardPolicy:如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常。

DiscarOldestPolicy:如果队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列。

CallRunsPolicy:如果添加到线程池失败,那么主线程会自己取执行该任务,不会等待线程池的线程取执行。

自定义策略

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143023.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQLyog安装教程详解

    SQLyog安装教程详解安装SQLyog的详细步骤(1)复制连接:https://pan.baidu.com/s/1IlkLChap1gYzCHo3meegew输入提取码:a1kw(2)等待下载(3)解压到新建文件夹(4)点击解压后的X64右键,以管理员的身份运行(5)选择语言Chinese(Simplified)(6)单击下一步(7)打开后需要证书姓名(Name):cr173序列号(Code):8d8120df-a5c3-4989-8f47-5afc79c56e7c或者(OR)姓名

    2022年5月28日
    49
  • Java泛型详解,史上最全图文详解「建议收藏」

    Java泛型详解,史上最全图文详解「建议收藏」泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确使用泛型,是一门必修课。一:泛型本质Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛.

    2022年7月8日
    28
  • javascript超强幻灯片代码

    javascript超强幻灯片代码javascript超强幻灯片代码[code]#f_div{    width:150px;    height:100px;    overflow:hidden;    margin-top:0;    margin-right:auto;    margin-bottom:0;    margin-left:0px;}#f_

    2022年7月13日
    18
  • 【19】进大厂必须掌握的面试题-50个React面试

    【19】进大厂必须掌握的面试题-50个React面试

    2020年11月13日
    211
  • 万字文肝Python基础知识

    万字文肝Python基础知识Python基础知识,进阶操作

    2022年6月24日
    23
  • python3 gil锁_python锁有哪几种

    python3 gil锁_python锁有哪几种前言python的使用者都知道Cpython解释器有一个弊端,真正执行时同一时间只会有一个线程执行,这是由于设计者当初设计的一个缺陷,里面有个叫GIL锁的,但他到底是什么?我们只知道因为他导致pyt

    2022年7月28日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号