- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的程序中,创建了一些线程并给定了一个结束的Task
(这样该线程就会死掉),我还有一个Executors.newSingleThreadScheduledExecutor
和 Executors.newSingleThreadExecutor
,我注意到如果我按下我制作的关闭按钮:
@FXML private void handleExit(){
gameManager.cleanup();
Stage stage = (Stage)menuBarTopMenu.getScene().getWindow();
Platform.exit();
stage.close();
}
我没有在 intelij 中得到 Process finished with exit code 0
。
所以我什至将我提到的那些线程设置为守护进程,这就是清理:
public void cleanup(){
updateTime.shutdown(); // it's Executors.newSingleThreadScheduledExecutor
updateTime.shutdownNow();
}
但是还是没有看到成功退出。难道是因为我没有关闭Executors.newSingleThreadExecutor
?我找不到关闭它的方法。
我应该做哪些其他清理工作?
最佳答案
是的,这正是因为您没有在 newSingleThreadExecutor 上调用关闭,但如果您有其他正在运行的线程,它们也可能会阻止应用程序退出。要强制 VM 关闭(所有线程都将终止),您可以调用 System.exit(0);
您将 Executor 服务创建为:
ExecutorService service = Executors.newSingleThreadScheduledExecutor();
\\ use the service to do work
\\ to shutdown the service
service.shutdown();
\\ to wait till the service terminate
service.awaitTermination();
关于java - 执行者或线程防止程序关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39477750/
所以我有一个排行榜,我每天使用以下查询有效地获取每个用户的分数: SELECT DATE(a.time) as time, a.userid, SUM(activity_weight) as weig
假设我有一个 ExecutorService(它可以是一个线程池,因此涉及到并发性),它在不同的时间执行一个任务,或者周期性地或者响应一些其他条件。要执行的任务如下: 如果此任务已在进行中,则什么也不
我正在运行的服务器应用程序收到多个任务请求,我想使用任务系统处理这些请求。 每个任务都表示为一个 Runnable,它将从线程池中请求 n 个线程,其中 n 小于或等于线程池大小。为了不线程过多导致
我有一个 long_task 函数,它运行大量 cpu 绑定(bind)计算,我想通过使用新的 asyncio 框架使其异步。生成的 long_task_async 函数使用 ProcessPoolE
Java 文档说 CompletableFuture:supplyAsync(Supplier supplier)在 ForkJoinPool#commonPool() 中运行任务而 Completa
我想了解 Spark Streaming 中的一个基本知识。我有 50 个 Kafka 主题分区和 5 个执行程序,我使用的是 DirectAPI,所以没有。 RDD 分区的数量将为 50。如何在 5
我的问题与 this one here 密切相关.正如在那里发布的那样,我希望主线程等到工作队列为空并且所有任务都已完成。然而,我的情况的问题是,每个任务都可能递归地导致提交新任务进行处理。这使得收集
我是一名优秀的程序员,十分优秀!