Java线程池定制ThreadPoolExecutor官方定制实例

1.仍然先看构造方法:ThreadPoolExecutor构造方法

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,

        BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);

corePoolSize:核心池的大小;

maximumPoolSize:线程池最大线程数;

keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止;

unit:参数keepAliveTime的时间单位(TimeUnit);

workQueue:一个阻塞队列,用来存储等待执行的任务;

threadFactory:线程工厂,主要用来创建线程;

handler:表示当拒绝处理任务时的策略,有以下四种取值:

(1)AbortPolicy丢弃任务并抛出RejectedExecutionException异常,默认策略

(2)DiscardPolicy:也是丢弃任务,但是不抛出异常

(3)DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务

(4)CallerRunsPolicy:由调用线程处理该任务(不创建新线程)

2.官方定制Executors定制

(1)newSingleThreadExecutor()源码

    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

通过源码可以看到:

corePoolSize:核心池的大小=1

maximumPoolSize:线程池最大线程数=1

keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止=0

unit:参数keepAliveTime的时间单位(TimeUnit)=MILLISECONDS(毫秒)

workQueue:一个阻塞队列,用来存储等待执行的任务=LinkedBlockingQueue队列

threadFactory:线程工厂,主要用来创建线程:没有写出,使用默认工厂类

handler:表示当拒绝处理任务时的策略,有以下四种取值:没有写出,使用AbortPolicy策略

(2)newFixedThreadPool(int nThreads)源码

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

通过源码可以看到:

corePoolSize:核心池的大小=nThreads

maximumPoolSize:线程池最大线程数=nThreads

keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止=0

unit:参数keepAliveTime的时间单位(TimeUnit)=MILLISECONDS(毫秒)

workQueue:一个阻塞队列,用来存储等待执行的任务=LinkedBlockingQueue队列

threadFactory:线程工厂,主要用来创建线程:没有写出,使用默认工厂类

handler:表示当拒绝处理任务时的策略,有以下四种取值:没有写出,使用AbortPolicy策略

(3)newCachedThreadPool()源码

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

通过源码可以看到:

corePoolSize:核心池的大小=0

maximumPoolSize:线程池最大线程数=Integer.MAX_VALUE(2147483647)

keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止=60

unit:参数keepAliveTime的时间单位(TimeUnit)=SECONDS(秒)

workQueue:一个阻塞队列,用来存储等待执行的任务=SynchronousQueue队列

threadFactory:线程工厂,主要用来创建线程:没有写出,使用默认工厂类

handler:表示当拒绝处理任务时的策略,有以下四种取值:没有写出,使用AbortPolicy策略

原文地址:https://www.cnblogs.com/xkzhangsanx/p/10801200.html

时间: 2024-08-06 06:03:22

Java线程池定制ThreadPoolExecutor官方定制实例的相关文章

Java并发编程:Java线程池核心ThreadPoolExecutor的使用和原理分析

目录 引出线程池 Executor框架 ThreadPoolExecutor详解 构造函数 重要的变量 线程池执行流程 任务队列workQueue 任务拒绝策略 线程池的关闭 ThreadPoolExecutor创建线程池实例 参考: 引出线程池 线程是并发编程的基础,前面的文章里,我们的实例基本都是基于线程开发作为实例,并且都是使用的时候就创建一个线程.这种方式比较简单,但是存在一个问题,那就是线程的数量问题. 假设有一个系统比较复杂,需要的线程数很多,如果都是采用这种方式来创建线程的话,那么

Java线程池之ThreadPoolExecutor

前言 线程池可以提高程序的并发性能(当然是合适的情况下),因为对于没有线程的情况下,我们每一次提交任务都新建一个线程,这种方法存在不少缺陷: 1.  线程的创建和销毁的开销非常高,线程的创建需要时间,会延迟任务的执行,会消耗大量的系统资源. 2.  活跃的线程会消耗系统资源,而大量的空闲线程会占用许多内存,给垃圾回收器带来很大的压力,而大量线程在竞争CPU资源的时间还会产生气体的性能开销. 3.  系统在可创建的线程上存在一个限制,如果超过了这个限制,很可能抛出OOM. 我们不难发现,在一定范围

深入理解 Java 线程池

目录   一.简介  二.Executor 框架  三.ThreadPoolExecutor  四.Executors  参考资料 一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建和销毁线程.如此一来,会大大降低系统的效率,可能频繁创建和销毁线程的时间.资源开销要大于实际工作的所需. 正是由于这个问题,所以有必要引入线程池.使用 线程池的好处 有

JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .

从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.以下是我的学习过程. 首先是构造函数签名如下: [java] view plain copy print ? public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<

Java 线程池ThreadPoolExecutor简单应用

什么是线程池: 线程池就是控制线程的一个池子.用来控制线程数量. 为什么要使用线程池: 1.避免系统重复创建和销毁线程影响运行的时间(创建+销毁>>执行时间时) 2.控制线程数量,线程过多会导致机器运行卡(大约一个线程占用1M空间) ThreadPoolExecutor构造方法 public ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize, long keepAliveTime, TimeUnit unit,  Blockin

Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理

相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理 以下是本文的目录大纲: 一.shutdown()  --  温柔的终止线程池 interruptIdleWorkers()  --  中断空闲worker tryTerminate()  --  尝试终止线程池 二.shutdown

Java 线程池学习

Reference: <创建Java线程池>[1],<Java线程:新特征-线程池>[2], <Java线程池学习>[3],<线程池ThreadPoolExecutor使用简介>[4],<Java5中的线程池实例讲解>[5],<ThreadPoolExecutor使用和思考>[6] [1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池. [2]中介绍

java线程池的学习

package advancedJava;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit; * java 线程池学习 * @author: cuiH * Date: 13-12-7public class ThreadPoolTest { * 线程池的概念 * jdk5提出了ThreadPool的概念 * 之

Java线程池详解(二)

一.前言 在总结了线程池的一些原理及实现细节之后,产出了一篇文章:Java线程池详解(一),后面的(一)是在本文出现之后加上的,而本文就成了(二).因为在写完第一篇关于java线程池的文章之后,越发觉得还有太多内容需要补充,每次都是修修补补,总觉得还缺点什么.在第一篇中,我着重描述了java线程池的原理以及它的实现,主要的点在于它是如何工作的.而本文的内容将更为上层,重点在于如何应用java线程池,算是对第一篇文章的一点补充,这样对于java线程池的学习和总结稍微完整一些. 使用过java线程池