首先我们需要明白,okhttp比其他网络请求框架的优势在哪里当然最重要的就是他对传輸层的Socket进行了进一步的封装。所谓的封装就是拿到服务器最原始的数据流,进行解析返回给用户。大家需要明白一点socket的连接是需要消耗资源的,如果每一次网络请求都去创建一个socket显然是不合理的。所以okhttp就引出了java连接池用哪个的概念所谓的java连接池用哪个就是为了复鼡socket,比如我们请求一个地址如果下一次在规定时间内,发送同样的请求那么socket就会被复用。
所谓的连接对象可以说是封装了Socket。并且记錄最后使用它的时刻
构造方法中创建socket对象,并且记录当前时间:
提供方法判断是否可以复用该连接对象:
keepLive:超过这个时间,将会回收連接对象
isRunning:防止回收线程重复启动
idleTime:当前连接对象的闲置时间
在这里就开启了清理线程清理线程就是一个缓存线程池
这里开启一个while循环,内部使用waitTime判断何时需要跳出死循环即队列中没有连接对象就可以跳出死循环。这里会调用clean()方法做真正的清理工作
这里会判断当前连接对象的闲置时间是否已经超过了最大等待时间,然后从队列中移除这些对象并且计算出所有连接对象的最大闲置时间,计算出下一次進行clean的时间
供外部调用,如果需要复用该连接对象直接从队列中取出来。
三、创建java连接池用哪个使用管理类
使用java连接池用哪个首先判断当前对象是否存在于java连接池用哪个中,没有的话需要添加到java连接池用哪个并且记录当前对象的添加时间。
结果显示没有在java连接池用哪个中的会创建新的连接对象存在的会复用连接对象。
ok这样一个java连接池用哪个就被我们完成了。附上完整代码