gpt4 book ai didi

java - 在关闭我的 JavaFX 程序之前停止线程

转载 作者:IT老高 更新时间:2023-10-28 20:30:49 26 4
gpt4 key购买 nike

我在关闭我的应用程序时遇到问题,因为在我关闭应用程序后某些线程仍在运行。有人可以帮我用一些方法在杀死主线程之前停止所有线程在后台执行???

[已编辑]

关于 javafx 的问题,我注意到许多新开发人员都面临管理线程的问题。我想分享我为简化在 javafx 上管理线程的生活所做的工作。我创建了一个基于 Android 的 AsyncTask 的 AsyncTask 类,它基本上以一种简陋但有效的方式与 Android 相同。您可以在 Github project 上找到更多信息。

最佳答案

您在这里有三个选项 - 最简单的方法是简单地将线程创建为守护进程,这意味着当您的主程序结束时,所有守护线程也将终止。

Thread thread = new Thread();
thread.setDaemon(true);

这是最简单的,但缺点是您无法正常关闭(即线程将停止,您将没有机会执行资源管理等,这对您来说可能是也可能不是问题)。

另一种方法是保留生成的线程,当您的程序收到关闭信号时,您遍历线程并传递某种信号以表明它们也应该终止

volatile boolean shutdown = false;

public void shutdown() {
shutdown = true;
}

public void run() {
while(!shutdown) {
... do your work here
}
... perform any cleanup work here

(注意:为清楚起见忽略任何异常处理)

最后一个选项是使用 java.util.concurrent 中的 Executor 框架

ExecutorService executorService = Executors.newFixedThreadPool(10);
... assign/invoke tasks etc

... at some point later your program is told to shutdown
... shutdown in executor too
executorService.shutdown();
executorService.awaitTermination(10, TimeUnit.SECONDS); // wait for 10s in this case
executorService.shutdownNow();

关于java - 在关闭我的 JavaFX 程序之前停止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14897194/

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