什么是线程池?为什么要使用线程池?如何使用?
展开全部
线程池其实就是将多个线程对象放到一个容器当中。
可以重用线程,减少创建和销毁线程带来的消耗。
要想知道如何使用线程池,就要先知道线程池的种类有多少种?线程池大概有以下几种:
以下介绍这几种线程池的用法:
ThreadPoolExecutor 是线程池真正的实现方法,以下是 ThreadPoolExecutor 的构造方法:
它需要传入一系列参数来配置线程池,下面介绍每个参数的意义。
一种固定线程数量的线程池。
可以通过 Executors 的 newFixedThreadPool() 方法创建:
newFixedThreadPool() 具体实现:
可以看出 newFixedThreadPool() 是通过创建 ThreadPoolExecutor 来创建线程池的。
并且因为 corePoolSize 和 maximumPoolSize 是一样的,所以这种线程池只有核心线程,任务超出线程数后,会在队列中等待。
具体使用如下:
一种线程数量不定的线程池。
可以通过 Executors 的 newCachedThreadPool() 方法创建:
newCachedThreadPool() 具体实现:
可以看到 corePoolSize 为 0,maximumPoolSize 为 Integer.MAX_VALUE,证明这种线程池没有核心线程,但是有多个非核心线程。
这种线程池的特点就是,当有任务提交时,如果有空闲线程则复用空闲线程,没有的话就新建线程处理。
空闲线程如果超过 60 秒就会被回收。
具体使用如下:
一种只有一个工作线程的线程池。
可以通过 Executors 的 newSingleThreadExecutor() 方法创建:
newSingleThreadExecutor() 具体实现:
从源码可以看出,这种线程池只有一个核心线程,并且总线程数为 1。
具体使用如下:
一种核心线程数量固定,非核心线程数不固定的线程池。
可以通过 Executors 的 newScheduledThreadPool() 方法创建:
newScheduledThreadPool() 具体实现:
从源码可以看出这种线程池的核心线程是固定的,非核心线程数没有限制,但是非核心线程出现空闲后,10 毫秒就会被回收。
具体使用:
可以重用线程,减少创建和销毁线程带来的消耗。
要想知道如何使用线程池,就要先知道线程池的种类有多少种?线程池大概有以下几种:
以下介绍这几种线程池的用法:
ThreadPoolExecutor 是线程池真正的实现方法,以下是 ThreadPoolExecutor 的构造方法:
它需要传入一系列参数来配置线程池,下面介绍每个参数的意义。
一种固定线程数量的线程池。
可以通过 Executors 的 newFixedThreadPool() 方法创建:
newFixedThreadPool() 具体实现:
可以看出 newFixedThreadPool() 是通过创建 ThreadPoolExecutor 来创建线程池的。
并且因为 corePoolSize 和 maximumPoolSize 是一样的,所以这种线程池只有核心线程,任务超出线程数后,会在队列中等待。
具体使用如下:
一种线程数量不定的线程池。
可以通过 Executors 的 newCachedThreadPool() 方法创建:
newCachedThreadPool() 具体实现:
可以看到 corePoolSize 为 0,maximumPoolSize 为 Integer.MAX_VALUE,证明这种线程池没有核心线程,但是有多个非核心线程。
这种线程池的特点就是,当有任务提交时,如果有空闲线程则复用空闲线程,没有的话就新建线程处理。
空闲线程如果超过 60 秒就会被回收。
具体使用如下:
一种只有一个工作线程的线程池。
可以通过 Executors 的 newSingleThreadExecutor() 方法创建:
newSingleThreadExecutor() 具体实现:
从源码可以看出,这种线程池只有一个核心线程,并且总线程数为 1。
具体使用如下:
一种核心线程数量固定,非核心线程数不固定的线程池。
可以通过 Executors 的 newScheduledThreadPool() 方法创建:
newScheduledThreadPool() 具体实现:
从源码可以看出这种线程池的核心线程是固定的,非核心线程数没有限制,但是非核心线程出现空闲后,10 毫秒就会被回收。
具体使用:
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询