2

我正在使用 Retrofit2。我可以创建几个 OkHttp3 客户端并与其他客户端共享第一个实例的连接池吗?它是线程安全和良好的做法吗?

4

1 回答 1

7

实例化您ConnectionPoolOkHttpClient.Builder每个客户端的使用,并使用方法传递所有新客户端实例connectionPool(ConnectionPool connectionPool)

ConnectionPool仅用于重用连接,它是线程安全的。但是,您应该考虑 OkHttp 自述文件中的这段代码:

不再有全局单例连接池。在 OkHttp 2.x 中,所有 OkHttpClient 实例默认共享一个公共连接池。在 OkHttp 3.x 中,每个新的 OkHttpClient 都有自己的私有连接池。应用程序应避免创建许多连接池,因为这样做会阻止连接重用。每个连接池都拥有自己的一组活动连接,因此拥有许多连接池的应用程序也有耗尽内存的风险!

于 2016-01-14T15:12:14.640 回答