[关闭]
@cxm-2016 2016-08-10T11:34:23.000000Z 字数 1385 阅读 1912

线程池的分类

java no


1、FixedThreadPool

线程数量固定的线程池,当所有线程都处于活动状态时,新任务会处于等待状态,只有核心线程并且不会回收(无超时机制),能快速的响应外界请求。

  1. public static ExecutorService newFixedThreadPool(int nThreads) {
  2. return new ThreadPoolExecutor(nThreads,
  3. nThreads,
  4. 0L,
  5. TimeUnit.MILLISECONDS,
  6. new LinkedBlockingQueue<Runnable>());
  7. }

2、CachedThreadPool

线程数量不定,只有非核心线程没有核心线程。最大线程数是Integer.MAX_VALUE,相当于能够创建无限多的线程。由于SynchronousQueue无法插入任何任务,所以新来的任务总是会被立刻执行。该类线程适合执行大量低耗时的任务。当没有任务时,由于没有核心线程,所以实际上是几乎不占有任何系统资源的。

  1. public static ExecutorService newCachedThreadPool() {
  2. return new ThreadPoolExecutor(0,
  3. Integer.MAX_VALUE,
  4. 60L,
  5. TimeUnit.SECONDS,
  6. new SynchronousQueue<Runnable>());
  7. }

3、ScheduledThreadPool

这是一个核心数限定,非核心线程无限的线程池。非核心线程闲置时会被立刻回收。此类线程池多用来执行定时任务和具有固定重复周期的任务

  1. public ScheduledThreadPoolExecutor(int corePoolSize) {
  2. super(corePoolSize, Integer.MAX_VALUE,
  3. DEFAULT_KEEPALIVE_MILLIS, MILLISECONDS,
  4. new DelayedWorkQueue());
  5. }

4、SingleThreadExecutor

该线程池仅有一个核心线程,它的作用是将所有任务使用一个线程完成,不需要处理线程同步的问题。

  1. public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
  2. return new FinalizableDelegatedExecutorService
  3. (new ThreadPoolExecutor(1, 1,
  4. 0L, TimeUnit.MILLISECONDS,
  5. new LinkedBlockingQueue<Runnable>(),
  6. threadFactory));
  7. }

示例:

  1. scheduledThreadPool.schedule(command,2000,TimeUnit.MILLISECONDS);
  2. //2000毫秒后执行command
  3. scheduledThreadPool.schedule(command,1000,5000,TimeUnit.MILLISECONDS);
  4. //延迟1000毫秒,每隔5000毫秒执行一次command
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注