Java 线程池之Jetty 线程池学习总结(java线程池的使用方法)

  本篇文章为你整理了Java 线程池之Jetty 线程池学习总结(java线程池的使用方法)的详细内容,包含有java 线程池 join java线程池的使用方法 java线程池threadfactory java线程池最佳实践 Java 线程池之Jetty 线程池学习总结,希望能帮助你了解 Java 线程池之Jetty 线程池学习总结。

  

 

 

  但通常我们很少用这4个工厂方法去创建线程池,而是直接使用ThreadPoolExecutor类构造线程池,因为这些工厂方法最终也是调用这个类来创建线程池的。

  众所周知,虽然ThreadPoolExecutor提供了corePoolSize和maximumPoolSize两个参数来控制线程池的基本大小和最大大小,但是这两个参数并不是那么好用:当任务队列采用SynchronousQueue时,通常需要无界的maximumPoolSize;当任务队列采用无界队列时,maximumPoolSize的值又相当于不起作用;当任务队列采用有界队列时,仅在任务队列已满,且未达到maximumPoolSize时才会扩充线程池大小。

  既然如此,那有没有一种更简单的实现方案呢?使用该方案,使用者只需要简单的配置下线程池的基本大小和最大大小,程序就可以根据任务的繁忙程度自动调整当前线程数量。答案是有的:Jetty--一个基于Java的web容器,和Tomcat齐名

  Jetty线程池介绍

  任务处理流程

  初始化线程池

  程序初始化运行时,会先创建线程池,线程池大小默认为minThreads,也就是说会预先创建minThreads个线程,线程名称格式形如“qtp1076496284-13”

  创建线程池时:

  
当前线程数比最小线程数小,或者没有空闲的线程,且当前线程数(threads )小于最大线程数,则创建线程;

  idleTimout大于0且当前线程数大于最小线程数,且线程空闲时间超过idleTimeout,则停止线程

  注意:程序判断是否存在空闲线程的逻辑是这样的:Net空闲线程数 = 空闲线程数 - 任务队列大小,如果“Net空闲线程数”为负数,则表示不存在空闲线程,即需要更多的线程来处理任务。

  任务队列及线程相关定义

  queueSize 任务队列大小,即队列中等待被线程执行的任务数。可通过getQueueSize()函数获取。

  threads 当前线程池中的线程数,包括已租给内部组件的线程、空闲线程、保留线程,以及正在执行临时作业的线程。threads = readyThreads + leasedThreads + utilizedThreads。 可通过getThreads() 函数获取。

  readyThreads 准备执行临时任务的线程数。readyThreads = idleThreads + availableReservedThreads。可通过getReadyThreads()函数获取。

  idleThreads 未被保留的空闲线程数。idleThreads = readyThreads - availableReservedThreads。可通过getIdleThreads()函数获取。

  reservedThreads 保留的线程数,默认值为-1。可通过getReservedThreads()函数获取。

  availableReservedThreads 可用的保留线程。可通过getAvailableReservedThreads()函数获取。

  leasedThreads 供内部组件使用,用于执行内部任务的线程。需要线程的Jetty组件(比如网络acceptors和selector)可能会使用ThreadPoolBudget从线程池中租用线程。站在线程池的角度来看,这些被租用的线程是活跃的,但是不能用于执行临时任务,比如一个HTTP请求,或者一个WebSocket帧。QueuedThreadPool有一个ReservedThreadExecutor,该组件会从线程池租用线程,但会让这些线程可用,就像它们是“idle”线程一样。线程池启动后,该值一般是恒定的。可通过getLeasedThreads()函数获取。

  minThreads 线程池中的最小线程数。可通过getMinThreads() 函数获取。

  maxThreads 线程池中的最大线程数。可通过getMaxThreads() 函数获取。

  maxAvailableThreads 可用于执行临时任务的最大线程数。maxAvailableThreads = maxThreads - leasedThreads 可通过getMaxAvailableThreads()函数获取。

  utilizedThreads执行临时任务的线程数,可通过getUtilizedThreads()函数获取。utilizedThreads = threads - leasedThreads - readyThreads

  utilizationRate = utilizedThreads / maxAvailableThreads 执行临时任务的线程利用率。该值为0.0D则表示线程池未被利用,如果为1.0D则表示线程池被充分利用于执行临时任务。可通过getUtilizationRate() 函数获取。

  busyThreads 正在执行内部任务和临时任务的线程数。 busyThreads = utilizedThreads + leasedThreads。可通过getBusyThreads()函数获取。

  https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/util/thread/QueuedThreadPool.html

  https://gitee.com/Tedgar156/jetty.project/blob/jetty-11.0.x/jetty-util/src/main/java/org/eclipse/jetty/util/thread/QueuedThreadPool.java

  以上就是Java 线程池之Jetty 线程池学习总结(java线程池的使用方法)的详细内容,想要了解更多 Java 线程池之Jetty 线程池学习总结的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: