线程池有几种?线程池的种类案列

2020-05-24 19:36:34 java常见问答 8206

首先问问大家是否了解线程呢?创建线程中有个方法是从线程池中创建,那么大家知道线程池有哪几种类呢?下面一起来了解一下吧!

一、线程池类型

线程池有哪几种类型呢,大家也了解ThreadPoolExecutor的用法吧,jdkExecutors包下还封装了一些其他类型的线程池。

1.newFixedThreadPool

public static ExecutorService newFixedThreadPool(int nThreads)
{
    return new ThreadPoolExecutor(nThreads, nThreads
        , 0 L, TimeUnit.MILLISECONDS
        , new LinkedBlockingQueue < Runnable > ());
}

从表面上可以知道,就是创建线程数量固定的线程池,线程池的corePoolSize参数和maximumPoolSize参数的大小是一样的,并且参数keepAliveTime的值为0,传入的队列LinkedBlockingQueue是为无界队列。学习ThreadPoolExecutor的时候我们也了解,传入一个无界队列,maximumPoolSize参数是不起作用的。

2.newSingleThreadExecutor

public static ExecutorService newSingleThreadExecutor()
{
    return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1
        , 0 L, TimeUnit.MILLISECONDS
        , new LinkedBlockingQueue < Runnable > ()));
}

从上述所描述的代码中我们可以知道的是,corePoolSize参数和maximumPoolSize参数都是1,keepAliveTime参数是0L, 传入的队列是无界队列。线程池中永远只要一个线程在工作。

3.newCachedThreadPool

public static ExecutorService newCachedThreadPool()
{
    return new ThreadPoolExecutor(0, Integer.MAX_VALUE
        , 60 L, TimeUnit.SECONDS
        , new SynchronousQueue < Runnable > ());
}

顾名思义,可缓存线程池,一说缓存一般离不开过期时间,该线程池也是,corePoolSize参数设置值为0,maximumPoolSize参数设置为int最大值,不同点是,线程池传入的队列是SynchronousQueue,一个同步队列,该队列没有任何容量,每次插入新数据,必须等待消费完成。当有新任务到达时,线程池没有线程则创建线程处理,处理完成后该线程缓存60秒,过期后回收,线程过期前有新任务到达时,则使用缓存的线程来处理。

4.newScheduledThreadPool

public static ScheduledExecutorService newScheduledThreadPool(
    int corePoolSize, ThreadFactory threadFactory)
{
    return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
}

这个线程池使用了ScheduledThreadPoolExecutor,该线程池继承自ThreadPoolExecutor, 执行任务的时候可以指定延迟多少时间执行,或者周期性执行。

以上就是今天所将的线程池的知识,如果想要了解更多java入门相关的知识,请继续关注本网站。

推荐文章:

java多线程详解,进程和线程的区别是什么

线程池拒绝策略是什么?线程池拒绝策略详解

线程池的核心参数有哪些?分别代表什么?