【发布时间】:2017-07-31 21:02:08
【问题描述】:
我在 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 个操作。事实上,它只需要一个。
如何调整这个?有这么多线程是自然的吗?
【问题讨论】:
-
这不正常。您是否正在创建一个 Retrofit 实例并重用它?还是为每个请求创建一个?
-
我正在为每个请求创建一个,但将其更改为仅创建一个请求并没有帮助,它仍然会创建相同的线程。