今天开会同事说使用线程池,当提交的子线程超过运行的最大线程数,会阻塞主线程,然后我就回复 有拒绝策略,会抛出异常,同时也要确认当线程池满的时候executor.execute方法会不会是阻塞的了,其实内心是不认可这个观点的。不轻信别人,谨慎求证,直接上测试代码

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class ThreadPoolTest {public static void main(String[] args) {ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 200, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<Runnable>(5));long a = 0;for(int i=0;i<500;i++){MyTask myTask = new MyTask(i);try{a= System.currentTimeMillis();executor.execute(myTask);}catch (Exception e){e.printStackTrace();}finally {long b = System.currentTimeMillis()-a;System.out.println("线程提交时间间隔"+b);}}executor.shutdown();}static class MyTask implements Runnable {private int taskNum;public MyTask(int num) {this.taskNum = num;}@Overridepublic void run() {System.out.println("正在执行task "+taskNum);try {Thread.currentThread().sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("task "+taskNum+"执行完毕");}}
}

上述代码配置线程运行最大线程数量是10,启动500个线程,测试当线程池满的情况下,根据领导的说法,会阻塞,因此我就在 executor.execute(myTask); 前后加上开始时间和结束时间,看看他们的执行时间,到底是多少。最后测试结果如下:

出现了很多线程被拒绝的异常,但是大部分情况都是0毫秒。所以阻塞主线程的说法是错误的。

使用ThreadPoolExecutor,当提交线程超过maximumPoolSize 会阻塞主线程吗?相关推荐

  1. android如何阻塞主线程,Android-Android如何避免阻塞主线程

    Android的Handler和AsyncTask,可以避免阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的. AsyncTask,它使创建需要与用户界面交互的长时间运 ...

  2. 阻塞主线程,等待异步子线程执行完毕再退出主线程,有几种写法?

    这里实际是考察线程间的通信,正常情况下,主线程里启动异步线程执行某个方法,理论上主线程和这个异步线程是并行执行,互不干扰,但是现在要求异步线程执行完毕方法之后,才能继续执行主线程,实际是如何阻塞主线程 ...

  3. “Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么?”

    前言 Android的消息机制主要是指Handler的运行机制,对于大家来说Handler已经是轻车熟路了,可是真的掌握了Handler?本文主要通过几个问题围绕着Handler展开深入并拓展的了解. ...

  4. Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

    面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...

  5. 腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

    面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么 心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来.开发者很难注意到一个主线程的四循环居然没有阻塞住主线程 ...

  6. CompleteFuture的 join方法会阻塞主线程,使用小心

    今天发现一个关于CompleteFuture的疑问,按道理join方法会阻塞,但是发现并不会,参加如下: public static void main(String[] args) {Long to ...

  7. java中主线程首先执行_java经典面试题:子线程先运行30次主线程,主线程40次,如此循环50次?...

    最近偶遇这道题,网上相似的题都是循环次数不一样.然而我百度搜到的论坛或者博客感觉都不太对,运行有穿插.请给出正确结果. 我们假使所有人都引入了业务对象. 并且我有疑问?感觉题目本意不是new Thre ...

  8. java定时器阻塞主线程_Java基础_死锁、线程组、定时器Timer

    一.死锁问题: 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. 比如,线程一需要第一把所,此时锁处于空闲状态,给了 ...

  9. 线程池如何保证所有子线程运行完再执行主线程

    Java主线程等待所有子线程执行完毕在执行,其实在我们的工作中经常的用到,比如说主线程要返回一个响应用户的值,但这个值得赋值过程是由过个子线程来完成的(模拟一个实际开发的情景),所以主线程必须等待子线 ...

最新文章

  1. 对象序列化与反序列化
  2. 章节之外:makefile中的函数定义
  3. 掌门教育微服务体系 Solar 第 3 弹:Nacos 企业级落地下篇
  4. 54.施工方案第二季(最小生成树)
  5. Adaptive Execution patch and how to bulid on cdh5
  6. dev gridview 打印列数过多_更适合孩子使用的错题打印机,超小体积什么都能打:喵喵机P3测评...
  7. baseurl php,html base URL是什么?html base详细解析汇总
  8. gnome-shell 扩展
  9. 达梦数据库/DM7迁移之导出sql脚本
  10. 哈工大计算机系统大作业——程序人生
  11. 2022-04-15 redis使用raft协议做主从复制记录
  12. PowerDesigner使用教程 —— 概念数据模型(CDM模型)
  13. 这7个摄影构图技巧,可能会帮你拍出好看照片!你学会了吗?
  14. C++(2-4)——sqrt的使用
  15. 品牌IP打造的实用性教程
  16. 利用ckplayer播放视频
  17. 图片去水印免费版-图片去水印免费版在线去水印
  18. 下载b站外挂字幕,用 potplayer 播放视频也能看字幕了
  19. 【Microsoft Office】无法在所选的更新通道上安装此产品
  20. ARMV8体系结构简介:exclusive操作例子

热门文章

  1. 大数据高级开发工程师——Hadoop学习笔记(3)
  2. Java实现SQLServer数据库mdf与ldf文件导入导出
  3. xilinx linux 编译内核
  4. Revit API Hook 之 拦截鼠标双击元素事件
  5. Linux 学习 十三单元
  6. css自适应屏幕教程,WordPress主题css适配屏幕尺寸大小自适应教程
  7. react项目搭建(基础学习笔记)
  8. 【NOJ1042】【算法实验三】电子老鼠闯迷宫
  9. Linux小白第一天——VMware Player 装 CentOS
  10. Python元类编程