我正在尝试克隆 Android 的 AsyncTask 以在 JavaFX 应用程序中使用。这是我想出的代码:import java.util.concurrent.Executor;import java.util.concurrent.Executors;abstract public class AsyncTask<Param, Result>{ private Param param; private static Executor executor; public AsyncTask() { if (executor == null) executor = Executors.newSingleThreadExecutor(); } protected void onPreExecute() { } protected Result doInBackground(Param param) { return null; } protected void onPostExecute(Result result) { } final public void execute(Param param) { this.param = param; onPreExecute(); Task t = new Task(); executor.execute(t); } private class Task implements Runnable { public void run() { Result result = doInBackground(param); onPostExecute(result); } }}我可以在我的 JavaFX 应用程序中使用这个类,它工作正常,除了一件事:当我关闭主窗口时,JVM 挂起而不是干净地退出。我必须强制退出该应用程序。我认为问题与 Executor 有关。因为我没有发出shutdown(),Executor 挂起等待更多任务执行。由于 AsyncTask 是 Java Executor 的包装器,因此扩展 AsyncTask 的类将无法直接访问 Executor,因此无法发出 shutdown()。如何有序关闭 Executor?
1 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
您要么需要从Application.stop方法中关闭执行程序,要么确保Executor的线程不会通过使用守护线程来阻止 JVM 关闭:
if (executor == null) {
executor = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
});
}
添加回答
举报
0/150
提交
取消