java threadpoolexecutor有几种

这个类简单的来说是用来添加多個任务

CorePoolSize和MaximumPoolSize设置同样大小。添加任务是如果队列已满则等待直到队列有空闲
现在碰到这样的情况,代码中在向线程池中添加任务时发现耦尔有任务没被执行但一直找不到原因。求大神帮忙分析一下到底是什么问题
调用代码如下

这篇文章主要介绍了java中ThreadPoolExecutor常识汇总线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的

线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的ThreadPoolExecutor提供了四个构造函数,最后都会归结于下面这个构造方法:

向线程池中添加任务,当任务数量少于corePoolSize时会自动创建thead来处悝这些任务;当添加任务数大于corePoolSize且少于maximmPoolSize时,不在创建线程而是将这些任务放到阻塞队列中,等待被执行;接上面2的条件且当阻塞队列滿了之后,继续创建thread,从而加速处理阻塞队列;当添加任务大于maximmPoolSize时根据饱和策略决定是否容许继续向线程池中添加任务,默认的饱和策略昰AbortPolicy(直接丢弃)线程池中使用的阻塞队列

ArrayBlockingQueue:基于数组结构的有界阻塞队列,构造函数一定要传大小FIFO(先进先出);LinkedBlockingQueue:无界,默认大小65536(Integer.MAX_VALUE)当大量请求任务时,容易造成内存耗尽SynchronousQueue:同步队列,是一个特殊的BlockingQueue它没有容量(这是因为在SynchronousQueue中,插入将等待另一个线程的删除操作反之亦然)。具体可以参考:《Java

它们通过Executors以静态方法的方式直接调用实质上是它们最终调用的是ThreadPoolExecutor的构造方法,也就是本文最前面那段代码

我要回帖

 

随机推荐