• Java 线程池


    • NEW,新建状态。尚未启动的线程的状态。
    • RUNNABLE,可运行状态。处于RUNNABLE状态的线程正在 JVM 中执行,但它可能正在等待来自操作系统(如处理器)的其他资源。
    • BLOCKED,阻塞状态。处于BLOCKED状态的线程正在等待监视器锁以便进入同步代码块或同步方法,或者在调用Object.wait()方法后准备重入同步代码块或同步方法。
    • WAITING,等待状态。处于WAITING状态的线程正在等待另一个线程执行特定的动作,例如需要另一个线程调用Object.notify()或者Object.notifyAll()进行唤醒。当调用以下无参方法时,线程会进入WAITING状态:
      • Object.wait()
      • Thread.join()
      • LockSupport.park()
    • TIMED_WAITING,具有指定等待时间的线程状态。当调用以下具有指定正等待时间的方法时,线程会进入TIMED_WAITING状态:
      • Thread.sleep(millis)
      • Object.wait(timeout)
      • Thread.join(millis)
      • LockSupport.parkNanos(blocker, nanos)
      • LockSupport.parkUntil(blocker, deadline)
    • TERMINATED,终止状态。当线程执行完成后,处于TERMINATED状态。

     线程池的实现

    线程池是通过ThreadPoolExecutor实现的

      public ThreadPoolExecutor(int corePoolSize,
                                  int maximumPoolSize,
                                  long keepAliveTime,
                                  TimeUnit unit,
                                  BlockingQueue<Runnable> workQueue,
                                  ThreadFactory threadFactory,
                                  RejectedExecutionHandler handler) {
            if (corePoolSize < 0 ||
                maximumPoolSize <= 0 ||
                maximumPoolSize < corePoolSize ||
                keepAliveTime < 0)
                throw new IllegalArgumentException();
            if (workQueue == null || threadFactory == null || handler == null)
                throw new NullPointerException();
            this.corePoolSize = corePoolSize;
            this.maximumPoolSize = maximumPoolSize;
            this.workQueue = workQueue;
            this.keepAliveTime = unit.toNanos(keepAliveTime);
            this.threadFactory = threadFactory;
            this.handler = handler;
        }

    • corePoolSize,核心线程数,表示要保留在线程池中的线程数,即使它们处于空闲状态,如果设置了allowCoreThreadTimeOut参数,则该参数的最小值可以为零。
    • maximumPoolSize,最大线程数,表示线程池中允许同时存在的最大线程数量。
    • keepAliveTime,存活时间,当线程池中的线程数量大于corePoolSize时,该参数表示多余的空闲线程在终止之前等待新任务的最长时间。也就是说,如果多余的空闲线程在等待时间超过keepAliveTime之后仍没有收到任务,则自动销毁。
    • unit,时间单位,表示keepAliveTime参数的时间单位。
    • workQueue,工作队列,在任务被执行前,该队列用于保存任务。该队列只能持有被execute方法提交的Runnable类型的任务。
    • threadFactory,线程工厂,执行器创建新线程时使用的工厂。
    • handler,拒绝策略,当达到线程数量边界和队列容量而阻止执行时使用的处理策略。
  • 相关阅读:
    第6课.内联函数分析
    第5课.引用的本质分析
    第4课.布尔类型和引用
    第3课.进化后的const
    第2课.C到C++的升级
    c语言深度解剖(笔记)
    你必须知道的495个c语言问题(笔记)
    JS弹出框
    车牌号正则表达式
    input输入文字后背景色变成了黄色 CSS改变(去掉黄色背景)
  • 原文地址:https://www.cnblogs.com/KL2016/p/16133883.html
Copyright © 2020-2023  润新知