美文网首页
Java线程池创建线程

Java线程池创建线程

作者: 菜鸟养成记 | 来源:发表于2021-08-09 12:36 被阅读0次

    一、创建线程池的方法
    在Java开发过程中经常需要用到线程,为了减少资源的开销,提高系统性能,Java提供了线程池,即事先创建好线程,如果需要使用从池中取即可,Java中创建线程池有以下的方式,

    1. 使用ThreadPoolExecutor类
    2. 使用Executors类

    这两种方式在本质上是一种方式,都是通过ThreadPoolExecutor类的方式,下面进行分析。

    1)ThreadPoolExecutor的方式
    查看JDK的源码,ThreadPoolExecutor类提供了以下构造方法:

    ThreadPoolExecutor类构造方法.png

    第一个构造方法原代码:

    public ThreadPoolExecutor(int corePoolSize,
                                  int maximumPoolSize,
                                  long keepAliveTime,
                                  TimeUnit unit,
                                  BlockingQueue<Runnable> workQueue) {
            this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
                 Executors.defaultThreadFactory(), defaultHandler);
        }
    

    从上面的代码中可以确定,我们需要传的参数有corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue,下面对这几个参数进行说明

    corePoolSize:线程池的核心线程数;

    maximumPoolSize:线程池的最大线程数;

    keepAliveTime:线程池空闲时线程的存活时长;

    unit:线程存活时长大单位,结合上个参数使用;

    workQueue:存放任务的队列,使用的是阻塞队列;

    在这个方法中调用了另外的一个构造方法,即上图中四个构造方法中的第四个,从源码中得知,一个线程池包含的属性共有corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、handler七个,上面说到了五个,下面是其他两个的含义,

    threadFactory:线程池创建线程的工厂;

    handler:在队列(workQueue)和线程池达到最大线程数(maximumPoolSize)均满时仍有任务的情况下的处理方式;

    上面的七个参数,也即ThreadPoolExecutor的第四个构造方法需要的参数。

    我们再来看中间的两个构造方法,和第一个的区别在于,第二个和第三个指定了创建线程的工厂和线程池满时的处理策略。

    通过上面的方式便创建了线程池

    相关文章

      网友评论

          本文标题:Java线程池创建线程

          本文链接:https://www.haomeiwen.com/subject/mdrzvltx.html