使用改造异步请求的JavaFX应用程序非常缓慢地退出

时间:2016-07-01 11:56:06

标签: java javafx retrofit okhttp retrofit2

我正在使用Java 8和api请求开发JavaFX应用程序我正在使用转换器2.1.0和converter-gson 2.1.0。

如果我发出同步请求:

Patient p = Core.api.getPatient(2).execute().body();

一切正常,但如果我使用异步版本:

Core.api.getPatient(2).enqueue(new Callback<Patient>() {
    @Override
    public void onResponse(Call<Patient> call, Response<Patient> response) {
        System.out.println("DONE");
    }

    @Override
    public void onFailure(Call<Patient> call, Throwable t) {
        // Nothing
    }
});

一切也正常(它打印&#34; DONE&#34;)。但是,当我使用标准JavaFX调用Platform.exit()退出应用程序时,UI关闭但应用程序仍然打开,并且只会在大约40秒后退出。

如果我只是做System.exit(0)一切正常,我猜这可能是一些线程问题,但我不确定。

任何人都知道可能出现的问题?

修改

我发现在执行Platform.exit()几个线程后,RMI TCP Connection(2)这样的名称保持交替并使用100%的CPU。

1 个答案:

答案 0 :(得分:0)

OkHttp使用两个线程池,在使用后保持线程活动60秒。您可以通过在调度程序的执行程序上调用shutdown并在连接池上调用evictAll来强制关闭它们。