gpt4 book ai didi

Retrofit2 - OkHttp ConnectionPool 线程增长到 100 多个线程。为什么?

转载 作者:行者123 更新时间:2023-12-02 10:20:08 25 4
gpt4 key购买 nike

我在 java 服务上使用 Retrofit2 连接到 REST API 并获取数据。

代码如下所示:

Retrofit retrofit =
new Retrofit.Builder().baseUrl(endPoint).addConverterFactory(JacksonConverterFactory.create())
.build();

SyncCentralLojaProxySvc svc = retrofit.create(SyncCentralLojaProxySvc.class);

LogVerCentralLojaEntity entity = syncSvc.getLogVerByCdFilial(filial);
long cd_log = (entity != null) ? entity.getCdLog() : 0;

Call<LogCentralLojaCompactoCollectionDto> call = svc.getLogCompacto(filial, cd_log);

Response<LogCentralLojaCompactoCollectionDto> response = call.execute();

//NOT_MODIFIED
if (response.code() == 304) {
return 0;
}

if (!response.isSuccessful())
throw new IOException(response.errorBody().string());

LogCentralLojaCompactoCollectionDto body = response.body();

它是一个简单的数据获取,每隔几秒同步(而不是并行)运行一次。

我通过 VisualVM 注意到 OkHttp 线程增长太多。该应用程序永远不会并行使用 100 个操作。事实上,它只需要一个。

我该如何调整这个?有这么多线程是自然的吗?

VisualVM Thread Monitor

最佳答案

使用连接池配置设置全局客户端解决了该问题:

ConnectionPool pool = new ConnectionPool(5, 10000, TimeUnit.MILLISECONDS);

OkHttpClient client = new OkHttpClient.Builder()
.connectionPool(pool)
.build();

Retrofit retrofit =
new Retrofit.Builder().baseUrl(endPoint)
.client(client)
.addConverterFactory(JacksonConverterFactory.create())
.build();

关于Retrofit2 - OkHttp ConnectionPool 线程增长到 100 多个线程。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45374442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com