Java中线程池重点总结

为什么要使用线程池?

  1. 线程缺乏统一管理,占用过多系统资源
  2. 缺乏更多功能,如定时执行、定期执行等

使用线程池的好处:

  1. 重用存在的线程,减少对象创建、消亡的开销
  2. 有效控制最大并发数,提高系统资源使用率
  3. 定时执行、定期执行

 

线程池所在包:java.util.concurrent

顶级接口是Executor,真正的线程池接口是ExecutorService【他们两个是继承关系】

AbstractExecutorService 实现类实现了前面的方法

java.util.concurrent.Executors类提供创建线程池的静态方法

方法名

说明

newCachedThreadPool()

创建一个可缓存的线程池,有任务时才创建新任务,还可以回收空闲的线程

newSingleThreadExecutor()

创建一个单线程池,这个线程池中只有一个线程,如果有多余的线程要排队等待

newFixedThreadPool

(int nThreads)

创建一个固定长度的线程池,空闲线程会一直保留。参数nThreads设定线程池中线程的数目

newScheduledThreadPool

(int corePoolSize)

创建了一个固定长度的线程池,而且可以以延迟或定时的方式来执行任务

ScheduledExecutorService中的方法:

scheduleAtFixedRate(Runnable command, long initialDelay,long period, TimeUnit unit)

command:要执行的任务

initialDelay:延迟第一次执行的时间

period:连续执行之间的时期

unit:initialDelay和period参数的时间单位

 

scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

command:要执行的任务

initialDelay:延迟第一次执行的时间

delay:一个执行终止与下一个执行的开始之间的延迟

unit:initialDelay和delay参数的时间单位

 

ThreadPoolExecutor类:

构造器中各个参数的含义:

  1. corePoolSize:核心池的大小(线程池中的核心线程数)
  2. maximumPoolSize:线程池最大线程数(不能超出)
  3. keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止
  4. unit:参数keepAliveTime的时间单位
  5. workQueue:一个阻塞队列,用来存储等待执行的任务
  6. threadFactory:线程工厂,主要用来创建线程
  7. handler:表示当拒绝处理任务时的策略(销毁数据)

猜你喜欢

转载自blog.csdn.net/baidu_29343517/article/details/81461174