java多线程中ThreadPoolExecutor线程池参数理解

工作中使用Executors.newFixedThreadPool(n)创建线程池时,阿里巴巴java开发手册提示要手动创建线程池.提示信息是;更加明确理程池运行规则,规避资源耗尽风险。
手动创建线程池的一种方式:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) 
  • corePoolSize: 核心线程数
  • maximumPoolSize: 最大线程数
  • keepAliveTime:一个非核心线程,如果不干活(闲置状态)的时长超过这个参数所设定的时长,就会被销毁掉如果设置allowCoreThreadTimeOut
    = true,则会作用于核心线程
  • workQueue :线程队列

    线程池的运行规则:新任务在方法 execute(java.lang.Runnable) 中提交(即开线程)时,如果运行的线程少于 corePoolSize,则线程数就是所开的线程数,即新任务提交则新开线程即使其他辅助线程是空闲的。如果运行的线程多于 corePoolSize 而少于 maximumPoolSize,线程进入线程队列,且仅当队列满时才创建新线程。如果将 maximumPoolSize 设置为基本的无界值(如 Integer.MAX_VALUE),则允许池适应任意数量的并发任务。

    提示原因:当使用Executors创建线程时,核心线程数最大线程数等于传入参数,keepAlivetime为0,workQueue队列的长度默认为Integer.MAX_VALUE即integer的最大值。所以当创建的线程数远大于线程池数将进入队列阻塞,理论上队列可以阻塞Integer.MAX_VALUE个线程,从而造成内存资源耗尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值