Java线程池ThreadPoolExecutor小结
来源:互联网 发布:文本压缩算法 编辑:程序博客网 时间:2024/05/17 12:24
几点需要注意的部分:
(1)当线程池数量小于corePoolSize大小,线程池创建一个新的线程来运行新的任务,即使之前创建的线程处于空闲状态。
prestartAllCoreThreads():在创建线程池时候设置。表示在线程池创建但还没有接受到任何任务的情况下,先行创建大小为corePoolSize的线程数。
举个例子:
ThreadPoolExecutor poolExecutor =new ThreadPoolExecutor(5,10,1, TimeUnit.MINUTES, new ArrayBlockingQueue<Runnable>(1)); poolExecutor.prestartAllCoreThreads();
(2)当线程池中存在大于corePoolSize数目的线程,如果当某个线程处理完任务后,等待keepAliveTime时间后仍然没有新的任务分配给它,那么这个线程将被回收。回收线程时,所有线程一视同仁,直到线程池中数量等于corePoolSize时停止回收。
allowCoreThreadTimeOut:将包括核心线程在内的,没有任务分配的任何线程,在等待keepAliveTime时间后全部进行回收。
(特例:如果设置的corePoolSize参数和设置的maximumPoolSize参数一致时,线程池在任何情况下都不会回收空闲线程。keepAliveTime和timeUnit也就失去了意义。)
(3)ThreadPoolExecutor线程池中三种实现BlockingQueue接口的任务等待队列:
SynchronousQueue:有限队列,这是一个内部没有任何容量的阻塞队列,任何一次插入操作的元素都要等待相对的删除/读取操作,否则进行插入操作的线程就要一直等待。即每个put必须等待一个take。
ArrayBlockingQueue:有限队列,一个由数组支持的有界阻塞队列。先进先出,有界缓冲区。试图向已满队列中放入元素会导致操作受阻塞;试图从空队列中提取元素将导致类似阻塞。
LinkedBlockingQueue:无限队列,某种意义上也是有限队列(max为Integer.MAX_VALUE)。基于链表实现,可以指定容量(等同于ArrayBlockingQueue),也可以不指定。
参考博客:ThreadPoolExecutor机制
- Java线程池ThreadPoolExecutor小结
- Java 线程池ThreadPoolExecutor
- Java 线程池ThreadPoolExecutor
- Java 线程池ThreadPoolExecutor
- JAVA线程池:ThreadPoolExecutor
- JAVA线程池ThreadPoolExecutor
- JAVA线程池ThreadPoolExecutor
- ThreadPoolExecutor java 线程池
- Java 线程池ThreadPoolExecutor
- java 线程池ThreadPoolExecutor
- JAVA线程池ThreadPoolExecutor
- java线程池:ThreadPoolExecutor
- Java线程池ThreadPoolExecutor
- Java 线程池 ThreadPoolExecutor
- java线程池ThreadPoolExecutor
- Java线程池ThreadPoolExecutor
- java 线程池ThreadPoolExecutor
- Java线程池ThreadPoolExecutor
- STM8L051x SPI Master
- 算法竞赛入门经典习题3-6 &3-7 进制转换
- C语言判断二叉树的子树
- css 背景定位 文字样式及文本溢出隐藏···
- hdu 4544 湫湫系列故事——消灭兔子
- Java线程池ThreadPoolExecutor小结
- JS——事件
- JavaEE学习笔记分享之初识JavaEE
- [置顶] Android 进程常驻(0)----MarsDaemon使用说明
- HDU 6092 Rikka with Subset
- HDU 6090 Rikka with Graph
- 分数拆分
- 暑假集训 T3 与非
- c++ delete与new