使用Executors类快速创建线程池


       Executors 类中定义了Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和Callable类的工厂方法和实用方法。这个类支持以下几种方法:

      一、此类中方法简介

          1.创建各种线程池的静态方法,返回值为ExecutorService

方法描述
newCachedThreadPool()

创建一个缓存线程池,线程池内的线程会存活60s

newCachedThreadPool(ThreadFactory threadFactory)使用指定的工厂类,创建一个缓存线程池,线程池内的线程会存活60s
newFixedThreadPool(int nThreads)创建一个固定数量线程的线程池
newFixedThreadPool(int nThreads, ThreadFactory threadFactory)使用指定的工厂类,创建一个固定数量线程的线程池
newSingleThreadExecutor()

创建一个线程的线程池

newSingleThreadExecutor(ThreadFactory threadFactory)使用指定的工厂类,创建一个线程的线程池

        2.创建各种线程池的静态方法,返回值为ScheduledExecutorService

方法描述
newScheduledThreadPool(int corePoolSize)创建一个线程池,该线程池可以调度命令在给定延迟后运行或定期执行
newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory)使用指定的工厂类,创建一个线程池,该线程池可以调度命令在给定延迟后运行或定期执行
newSingleThreadScheduledExecutor()创建一个单线程执行器,该执行器可以安排命令在给定延迟后运行或定期执行
newSingleThreadScheduledExecutor(ThreadFactory threadFactory)使用指定的工厂类,创建一个单线程执行器,该执行器可以安排命令在给定延迟后运行或定期执行

        3.创建并返回一个ThreadFactory,该ThreadFactory将新创建的线程设置为已知状态

返回值方法描述
static ThreadFactorydefaultThreadFactory()返回一个默认的线程工厂类用来创建新线程
static ThreadFactoryprivilegedThreadFactory()返回一个线程工厂,该线程工厂用于创建具有与当前线程相同权限的新线程,privilegedThreadFactory类继承了defaultThreadFactory

        4.从其他类似闭包的表单中创建并返回一个Callable的方法,因此它们可以用于需要Callable的执行方法

返回值方法描述
static Callable<Object>callable(PrivilegedAction<?> action)返回一个Callable对象,该对象在被调用时运行给定的特权操作并返回其结果
static Callable<Object>callable(PrivilegedExceptionAction<?> action)返回一个Callable对象,该对象在被调用时运行给定的特权异常操作并返回其结果
static Callable<Object>

callable(Runnable task)

返回一个Callable对象,该对象在被调用时运行给定的任务并返回null
static <T> Callable<T>callable(Runnable task, T result)返回一个Callable对象,该对象在被调用时运行给定的任务并返回给定的结果

 二、不建议使用Executors的原因

        线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,避免资源耗尽的风险。Executors各个方法的弊端:

        1. newSingleThreadExecutornewFixedThreadPool:主要问题是对接的请求处理队列可能会耗费非常大的内存,甚至OOM

        2.newCachedThreadPoolnewScheduledThreadPool:主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,设置OOM  

三、Executor接口

        接口中只有一个execute方法,此接口是所有线程池的鼻祖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值