特性简介
- 支持请求克隆
- 支持请求取消
- 支持同步/异步请求
- 支持请求限流
同步/异步
同步请求
- 调用RealCall的execute方法
异步请求
- 传入回调对象Callback,封装到AysncCall中,AysncCall实现了Runnable接口
- 执行AysncCall-execute方法,执行成功调用onSucess回调函数,执行失败调用onFailure回调函数
- 单个任务执行完成后在finally块中轮询存储队列中是否有未执行的请求,如果有且满足并发执行条件,则将该请求任务放入线程池中执行
异步请求线程池模型
- 采用SynchronousQueue阻塞队列模型
- 线程保活时间60秒
请求限流
- 异步请求下单个host容许的并发数为5
问题思考
- 异步请求下向同一个host发起大量请求会有什么问题?
大量请求进来,会将暂时不能执行的请求任务放到Deque readyAsyncCalls队列中,无界队列,因此不会 - 异步请求下执行finally块轮询时,会遍历readyAsyncCalls队列,会有安全问题么?
1.readyAsyncCalls队列模型是非线程安全的
2.遍历时进行了sychronized保护,因此不会有安全问题
请求重试
- 不同方式发起的请求重试次数不同,谷歌21次、火狐/curl/wget20次、safari16次、http1.0 5次
请求撤销
- 撤销方法中会调用套接字的close方法,关闭连接