ThreadPoolExecutor线程池配置
来源:互联网 发布:介绍软件的ppt 编辑:程序博客网 时间:2024/05/21 06:11
1.线程队列
ThreadPoolExecutor允许提供一个BlockingQueue来保存等待执行的任务。
基本的任务排队方法有3种:无界队列、有界队列和同步移交(Synchronous Handoff)。
队列的选择与其他的配置参数有关,例如线程池的大小。
newFixedThreadPool和newSingleThreadExecutor在默认的情况下使用一个无界的LinkedBlockingQueue。 如果所有的工作者线程都处于忙绿状态,那么任务将在队列中等候。
在使用有界的工作队列时,队列的大小与线程池的大小必须一起调节。如果线程池小而队列大,那么有助于减少内存使用量,降低CPU的使用率,同时还可以减少上下切换,但是限制了吞吐量。
对于非常大的或者无界的线程池,可以通过使用SynchronousQueue来避免任务排队,以及直接将任务从生产者移交给工作者线程。SynchronousQueue不是一个真正的队列,而是一个线程之间进行移交的机制。要将一个元素放入SynchronousQueue中,必须有另一个线程正在等待接受这个元素。如果没有线程正在等待,并且线程池的当前大小小于最大值,那么ThreadPoolExecutor将创建一个新的线程,否则根据饱和策略,这个任务将被拒绝。
在newCachedThreadPool工厂方法中使用了SynchronousQueue。
2.饱和策略
当有界队列被填满后,饱和策略开始发挥作用。ThreadPoolExecutor的饱和策略可以通过修改调用setRejectExecutionHandler来修改。JDK提供的饱和策略有:AbortPolicy、callerRunsPolicy、DiscardPolicy和DiscardOldPolicy。
callerRunsPolicy(调用者运行)策略实现了一种调节机制,该策略既不会抛弃任务,也不会抛出异常,而是将某些任务退回到调用者,从而降低新任务的流量。
ThreadPoolExecutor允许提供一个BlockingQueue来保存等待执行的任务。
基本的任务排队方法有3种:无界队列、有界队列和同步移交(Synchronous Handoff)。
队列的选择与其他的配置参数有关,例如线程池的大小。
newFixedThreadPool和newSingleThreadExecutor在默认的情况下使用一个无界的LinkedBlockingQueue。 如果所有的工作者线程都处于忙绿状态,那么任务将在队列中等候。
在使用有界的工作队列时,队列的大小与线程池的大小必须一起调节。如果线程池小而队列大,那么有助于减少内存使用量,降低CPU的使用率,同时还可以减少上下切换,但是限制了吞吐量。
对于非常大的或者无界的线程池,可以通过使用SynchronousQueue来避免任务排队,以及直接将任务从生产者移交给工作者线程。SynchronousQueue不是一个真正的队列,而是一个线程之间进行移交的机制。要将一个元素放入SynchronousQueue中,必须有另一个线程正在等待接受这个元素。如果没有线程正在等待,并且线程池的当前大小小于最大值,那么ThreadPoolExecutor将创建一个新的线程,否则根据饱和策略,这个任务将被拒绝。
在newCachedThreadPool工厂方法中使用了SynchronousQueue。
2.饱和策略
当有界队列被填满后,饱和策略开始发挥作用。ThreadPoolExecutor的饱和策略可以通过修改调用setRejectExecutionHandler来修改。JDK提供的饱和策略有:AbortPolicy、callerRunsPolicy、DiscardPolicy和DiscardOldPolicy。
callerRunsPolicy(调用者运行)策略实现了一种调节机制,该策略既不会抛弃任务,也不会抛出异常,而是将某些任务退回到调用者,从而降低新任务的流量。
0 0
- ThreadPoolExecutor线程池配置
- spring线程池ThreadPoolExecutor配置
- Spring中配置线程池ThreadPoolExecutor参考
- Java 线程池ThreadPoolExecutor
- 线程池 ThreadPoolExecutor
- Java 线程池ThreadPoolExecutor
- 线程池ThreadPoolExecutor
- 线程池ThreadPoolExecutor参数设置
- Java 线程池ThreadPoolExecutor
- ThreadPoolExecutor线程池
- JAVA线程池:ThreadPoolExecutor
- ThreadPoolExecutor 线程池
- JAVA线程池ThreadPoolExecutor
- JAVA线程池ThreadPoolExecutor
- ThreadPoolExecutor java 线程池
- Java 线程池ThreadPoolExecutor
- java 线程池ThreadPoolExecutor
- ThreadPoolExecutor线程池
- C#时间/日期格式大全
- java基础之【堆、栈、方法区】结构图
- 源码编译nginx,php
- 南阳 oj尼姆博弈
- mouseover VS onmouseover jquery
- ThreadPoolExecutor线程池配置
- acm-快算24(poj3983)暴力
- Handler,Looper,MessageQueue的实现
- 15.7 Substring with Concatenation of All Words
- [Golong]学习笔记(一) 基础知识
- cygwin安装GNU make
- SOAP webserivce 和 RESTful webservice 对比及区别
- 背景图片铺满屏幕-------Day85
- time.h