美文网首页
JAVA五种线程池的使用(五)

JAVA五种线程池的使用(五)

作者: WinkTink | 来源:发表于2020-12-23 11:13 被阅读0次

一.  newCachedThreadPool

作用:

         创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。

特征:

        (1)线程池中数量没有固定,可达到最大值(Interger. MAX_VALUE)

        (2)线程池中的线程可进行缓存重复利用和回收(回收默认时间为1分钟)

        (3)当线程池中,没有可用线程,会重新创建一个线程

创建方式:

         Executors.newCachedThreadPool();

二. newFixedThreadPool

作用:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

特征:

(1)线程池中的线程处于一定的量,可以很好的控制线程的并发量

(2)线程可以重复被使用,在显示关闭之前,都将一直存在

(3)超出一定量的线程被提交时候需在队列中等待

创建方式:

(1)Executors.newFixedThreadPool(int nThreads);//nThreads为线程的数量

(2)Executors.newFixedThreadPool(int nThreads,ThreadFactory threadFactory);//nThreads为线程的数量,threadFactory创建线程的工厂方式

三. newSingleThreadExecutor

作用:创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。(注意,如果因为在关闭前的执行期间出现失败而终止了此单个线程,那么如果需要,一个新线程将代替它执行后续的任务)。可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的 newFixedThreadPool(1) 不同,可保证无需重新配置此方法所返回的执行程序即可使用其他的线程。

特征:

(1)线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行

创建方式:

(1)Executors.newSingleThreadExecutor() ;

(2)Executors.newSingleThreadExecutor(ThreadFactory threadFactory);// threadFactory创建线程的工厂方式

这里针对上面的这三个连接池有一个共同特性,就是在创建这三个连接池的时候会返回一个对象ExecutorService,它代表的是一个线程池,而且是一个尽快执行的线程池,它可以执行Runable和Callable对象所代表的线程。该对象提供的方法有一下几种:

四. newScheduleThreadPool

作用: 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

特征:

(1)线程池中具有指定数量的线程,即便是空线程也将保留

(2)可定时或者延迟执行线程活动

创建方式:

(1)Executors.newScheduledThreadPool(int corePoolSize);// corePoolSize线程的个数

(2)newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory);// corePoolSize线程的个数,threadFactory创建线程的工厂

五. newSingleThreadScheduledExecutor

作用: 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行。

特征:

(1)线程池中最多执行1个线程,之后提交的线程活动将会排在队列中以此执行

(2)可定时或者延迟执行线程活动

创建方式:

(1)Executors.newSingleThreadScheduledExecutor() ;

(2)Executors.newSingleThreadScheduledExecutor(ThreadFactory threadFactory) ;//threadFactory创建线程的工厂

这里针对上面的这两个连接池有一个共同特性,就是在创建这三个连接池的时候会返回一个对象ScheduledExecutorService它继承了ExecutorService,它代表的是一个线程池,而且是一个可以延迟或者定时执行的的线程池,它可以执行Runable和Callable对象所代表的线程。该对象提供的方法除了从ExecutorService过来之外,还有以下几种:

参考来源:https://blog.csdn.net/u010690828/article/details/77170533

相关文章

  • 线程

    Java 并发编程:线程池的使用 Java 并发编程:线程池的使用java 多线程核心技术梳理 (附源码) 本文对...

  • ThreadPoolExecutor

    阿里Java开发手册明确java开发使用 ThreadPoolExecutor 的方式创建线程池 java五种常见...

  • 01 java线程池-初始线程池-ThreadPoolExecu

    java线程池 为什么要用线程池? 降低系统资源消耗。 提高线程可控性。 如何创建使用线程池? JDK8提供了五种...

  • Java线程池解析

    参考文章:Java并发:线程池,饱和策略 前言 Java线程池的使用在工作中还是比较常见的,线程池可以减小线程建立...

  • 五种线程池的对比与使用

    今天对五种常见的java内置线程池进行讲解。 线程使用的demo newCachedThreadPool 重用之前...

  • 零碎知识点整理

    sofa结构体系:多模块 sofa中使用sofa线程池 Java 线程池的使用非常广泛,目前有两类广泛使用的线程池...

  • 线程池

    线程池 原创 无尘粉笔 粉笔社区 昨天 Java线程池的Executors的使用 Java通过Executors提...

  • Java并发编程:线程池的使用

    Java并发编程:线程池的使用

  • Java 线程池

    Java线程池是java cocurrent包下提供的类,使用非常方便。本文希望整理下Java 线程池相关的知识以...

  • java 线程池

    java 线程池 Java 的 concurrent 包下提供了多种线程池的实现,使用起来非常方便 Executo...

网友评论

      本文标题:JAVA五种线程池的使用(五)

      本文链接:https://www.haomeiwen.com/subject/lhaaoqtx.html