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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • svn中文语言包安装无反应_英文版win7安装语言包

    svn中文语言包安装无反应_英文版win7安装语言包1.中文语言包下载地址,两种下载方式:下载(1.9.4版本):https://sourceforge.net/projects/tortoisesvn/files/1.9.4/Language%20Packs/官网下载:https://tortoisesvn.net/downlo…

    2025年7月6日
    2
  • windows 10 install oracle 12c error:[ INS-30131 ]

    windows 10 install oracle 12c error:[ INS-30131 ]

    2022年1月9日
    54
  • python3 map object 转list

    python3 map object 转list这里的 mapobject 是 map 函数得到的 不是 直接把 np array map float line strip split dtype np float32 套一个 list 改成 np array list map float line strip split dtype np float32 即可

    2025年7月6日
    2
  • 毕设/私活/必备,一个挣钱的标准开源前后端分离【springboot+vue+redis+Spring Security】脚手架–若依框架「建议收藏」

    目录java毕业设计项目《100套》推荐订阅前言:主要特性功能:内置功能模板:本地运行系统:后端运行:前端运行:必要配置:项目运行截图:登录:首页:菜单模块:用户绑定角色、角色控制菜单权限显示部门模块:通知公告:日志管理:项目文件结构:后端结构:前端结构:核心技术后端技术前端技术精彩java毕设实战项目推送java毕业设计项目《100套》推荐订阅前言:今天和大家分享一个是一个开源接私…

    2022年4月7日
    70
  • 2000数据库置疑怎么处理_msdb数据库置疑的解决方法

    2000数据库置疑怎么处理_msdb数据库置疑的解决方法由于服务器意外的断电,导致SQLSERVER服务器上数据库出现“置疑”而无法使用,通过网上搜索,找到以下方法解决问题,这里记录一下:产生数据库置疑的时侯,数据库文件和日志文件都是存在的,如果数据库文件都不存在了,则要另当处理。1、停止数据库服务器,将数据库MDF文件和LDF文件复制备份一份2、启动数据库服务器,删除置疑的数据库3、仅用备份的数据库MDF文件附加数据库,sp_attach_…

    2022年8月20日
    11
  • Android 开机动画源码分析

    Android 开机动画源码分析Android系统在启动SystemServer进程时,通过两个阶段来启动系统所有服务,在第一阶段启动本地服务,如SurfaceFlinger,SensorService等,在第二阶段则启动一系列的Java服务。开机动画是在什么时候启动的呢?通过查看源码,Android开机动画是在启动SurfaceFlinger服务时启动的。SystemServer的main函数首先调用init1来启动本地服务,

    2022年5月15日
    36

发表回复

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

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