Jetty 11版本中org.eclipse.jetty.client.HttpClient是否为线程安全?
Jetty HttpClient 线程安全相关说明
已完成初始化、启动流程的
HttpClient实例是线程安全的,支持多个线程同时调用执行请求,不会出现并发问题。
你阅读源码时看到的非线程安全字段,几乎都属于初始化阶段的配置类字段,官方要求所有对HttpClient的参数配置、start()启动操作,必须在实例交付给多线程使用之前完成,启动完成后这部分字段不会再被修改,不会有并发修改风险。而运行阶段处理请求、调度连接池的相关逻辑,本身都做了完善的线程安全处理,无需使用者额外加锁。
使用注意事项:
- 禁止在多线程已经开始调用
HttpClient发请求后,再修改实例的配置参数(比如连接池大小、超时时间、代理配置等),这类配置修改操作本身不保证线程安全,会引发不可预期的异常 - 官方推荐多线程复用同一个
HttpClient实例,其内置的连接池复用机制能大幅降低连接创建开销,性能远高于每个线程单独创建实例的用法 - 如果不同业务场景需要隔离配置(比如不同的超时规则、不同的身份认证逻辑),可以创建多个独立的
HttpClient实例,每个实例负责对应场景的请求,各自在对应的业务线程组内共享即可
内容的提问来源于stack exchange,提问作者pmpm
相关产品推荐
相关产品推荐

