我正在使用Retrofit2。 我可以创建几个OkHttp3客户端并从第一个实例与其他客户端共享连接池吗?它是线程安全和良好的做法吗?
答案 0 :(得分:4)
实例化您的ConnectionPool
并使用每个客户端的OkHttpClient.Builder
并使用connectionPool(ConnectionPool connectionPool)
方法传递所有新客户端实例。
ConnectionPool
仅用于重用连接,它是线程安全的。但是你应该从OkHttp的自述文件中考虑这个片段:
不再有全局单例连接池。在OkHttp 2.x中, 默认情况下,所有OkHttpClient实例共享一个公共连接池。 在OkHttp 3.x中,每个新的OkHttpClient都有自己的私有连接 池。应用程序应避免创建许多连接池 这样做会阻止连接重用。每个连接池都有自己的连接 一组连接存活,所以具有许多池的应用程序也是如此 冒着精疲力竭的记忆!