Jetty 源代码分析之线程池

Jetty 通过Server将连接器Connector和处理组件Handler连接起来,Connector负责监听用户连接请求,Handler负责读写I/O,解析HTTP协议以及Servlet规范。无论是Connector还是Handler,在处理多个请求和并发连接时,都需要线程池的支持。Jetty自己实现了线程池QueuedThreadPool来满足需求。

1 Jetty 线程池工作模型

  Jetty线程池工作模型如下图,主要包含一个线程队列和一个任务队列,线程队列中的各个线程不断地从任务队列中获取下一个任务执行,有的任务自身可能会产生新的任务,比如新的I/O连接,因此执行该任务的线程会将新任务提交到任务队列中,线程每次执行一个任务结束后,会根据当前线程数目,进程设置允许的最大线程数目以及上一次线程回收时间来决定自身是否需要回收。主线程也是任务的生产者,例如在初始化Connector时创建的SelectSet。



2  Jetty 线程池工作过程分析


1) Jetty线程池相关属性

 在QueuedThreadPool中定义了一组变量描述线程池的相关属性:
_threadsStarted : 一个AtomicInteger变量,用以记录当前活动的线程数;
_threadsIdle:一个AtoImicnteger变量,用于记录当前空闲的线程数;
_lastShrink: 一个AtomicLong变量,用于记录上次回收的时间;
_threads : 一个ConcurrentLinkedQueue ,用于表示当前活动线程队列;
_joinLock : 一个等待锁;
_jobs : 一个ArrayBlockingQueue,用于表示任务队列;
_name: 线程池名称;
_maxIdleTimeMs : 线程池最大空闲时间,单位为毫秒 , 默认为60000
_maxThreads : 线程池中允许的最大线程数,默认为254;
_minThreads : 线程池中维护的最少线程数,默认为8;
_maxQueued : 任务队列中允许的最大的任务数目

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值