首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在关闭我的JavaFX程序之前停止线程

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

Stack Overflow用户
提问于 2013-02-15 22:47:58
回答 5查看 28.9K关注 0票数 23

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

编辑的

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-15 23:01:05

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

代码语言:javascript
复制
Thread thread = new Thread();
thread.setDaemon(true);

这是最简单的,但缺点是你不会得到一个优雅的关机(即线程将停止,你将没有机会执行资源管理等,这对你来说可能是问题,也可能不是问题)。

另一种方法是保持对生成的线程的控制,当您的程序接收到关闭的信号时,您可以迭代这些线程,并将某种信号传递给signa,通知它们也应该终止

代码语言:javascript
复制
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中的执行器框架

代码语言:javascript
复制
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();
票数 37
EN

Stack Overflow用户

发布于 2013-12-04 19:54:10

解决此问题的更好方法是在Close Request上添加EventHandler

代码语言:javascript
复制
@Override
public void start(Stage primaryStage) {
    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
       @Override
       public void handle(WindowEvent e) {
          Platform.exit();
          System.exit(0);
       }
    });
}
票数 37
EN

Stack Overflow用户

发布于 2018-01-15 00:46:21

覆盖您的应用程序类

代码语言:javascript
复制
//System.exit(0) This will close all timers and threads inside the Jar application...
@Override
public void stop() throws Exception {
    super.stop(); //To change body of generated methods, choose Tools | Templates.
    System.exit(0);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14897194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档