分享使用Java线程池的好处,以及Executors类-知了汇智

分享使用Java线程池的好处,以及Executors类

  一、先谈谈为什么要使用线程池

  第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

  第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

  第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控

  线程池对线程的管理性体现在:

  1.创建和销毁由线程池管理,能够设置非核心线程的存活时间。

  2.能够控制最大线程数

  3.提供定时执行的功能

分享使用Java线程池的好处,以及Executors类

 

  二、关于Executors类

  首先:这就是个工具类,封装了大部分我们常用到的线程池相关方法。

  此类中包含了Executor,ExecutorService,ScheduledExecutorService,ThreadFactory和Callable类的工厂和utils方法。

  此类支持以下方法:

  1.使用常用的配置进行设置,创建和返回ExecutorService

  2.使用常用的配置进行设置,创建和返回ScheduledExecutorService

  3.创建并返回“包装”ExecutorService,该ExecutorService通过使特定的方法无法访问,来禁止重新配置。

  4.创建并返回ThreadFactory,该ThreadFactory其能够根据指定状态创建的新线程。

  5.从类似闭包形式创建和返回Callable,可以在需要Callable的执行方法中使用它们。

  三、怎么使用线程池

  Java中的线程池实现了Executor和ExecutorService接口,可以使用以下四种方法添加runnable任务:

 void execute(Runnable command);
 Future<?> submit(Runnable task);
 <T> Future<T> submit(Runnable task, T result);
 <T> Future<T> submit(Callable<T> task);
 //后面三种方法都会返回一个Future对象,使得我们可以获取任务执行的状态。

  上面为什么是用的“添加”,而不是“执行”呢?因为调用execute或submit方法之后,任务只是被添加到线程池的阻塞队列中,然后等待空闲线程的来执行。如果阻塞队列满了,并且线程池中的线程数也达到了设置的最大值,那么此时线程池饱和,任务无法添加,会被Reject。具体的Reject后面文章再谈。
 

     版权声明:本文来源于网络,由知了堂搜集整理,仅供大家学习Java时使用

项目教学·项目驱动

132 2811 3191
预约免费试学
点击咨询
预约试学