使用ThreadPoolExecutor,当提交线程超过maximumPoolSize 会阻塞主线程吗?
来源:互联网 发布:阿里云客服一天多少钱 编辑:程序博客网 时间:2024/06/07 13:27
今天开会同事说使用线程池,当提交的子线程超过运行的最大线程数,会阻塞主线程,然后我就回复 有拒绝策略,会抛出异常,同时也要确认当线程池满的时候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; } @Override public 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毫秒。所以阻塞主线程的说法是错误的。
阅读全文
0 0
- 使用ThreadPoolExecutor,当提交线程超过maximumPoolSize 会阻塞主线程吗?
- 线程池---ThreadPoolExecutor中corePoolSize,maximumPoolSize,workQueue的关系
- 主线程(UI线程)负责UI, 被阻塞过久会产生ANR
- ThreadPoolExecutor的corePoolSize和maximumPoolSize
- ThreadPoolExecutor的corePoolSize和maximumPoolSize
- 当主线程队列,如果处理一个消息超过5秒,android 就会抛出一个 ANP(无响应)的消息
- 理解ThreadPoolExecutor源码(一)线程池的corePoolSize、maximumPoolSize和poolSize
- 理解ThreadPoolExecutor源码(一)线程池的corePoolSize、maximumPoolSize和poolSize
- MFC多线程中主线程阻塞了子线程
- Python 线程,用类实现多线程,join阻塞主线程
- runloop 阻塞主线程
- 线程池ThreadPoolExecutor与阻塞队列BlockingQueue
- 多线程情况下,主线程先退出,子线程会被强制退出吗
- 多线程情况下,主线程先退出,子线程会被强制退出吗
- Junit单元测试主线程退出,子线程也会退出
- Junit单元测试主线程退出,子线程也会退出
- Junit单元测试主线程退出,子线程也会退出
- 线程池ThreadPoolExecutor使用
- [2017.11.12]Set&HashSet&LinkedHashSet&TreeSet&模拟用户
- Impala中的invalidate metadata和refresh
- 浏览器工作原理详解
- 英文论文-城市云脑,基于互联网云脑的智慧城市新架构
- Ubuntu上systemtap安装
- 使用ThreadPoolExecutor,当提交线程超过maximumPoolSize 会阻塞主线程吗?
- netty(二):事件执行分析
- CCF-训练50题-NO.27-挖掘机技术哪家强
- mysql在Linux环境下开启远程访问权限和开放3306端口
- jquery选择器之层级选择器
- Java的特点
- Re-ID: Person Re-identification by Local Maximal Occurrence Representation and Metric Learning 论文解析
- CCF-训练50题-NO.28-到底买不买
- 一步步实现WebServer中间件——Http协议