Stop threads before close my JavaFX program

后端 未结 5 1153
迷失自我
迷失自我 2020-12-14 17:05

I\'m having a problem with closing my application because some threads are still running after I close the application. Somebody can help me with some method to stop all Th

5条回答
  •  无人及你
    2020-12-14 17:59

    You have three options here - the easiest is to simply create your Threads as deamons, which means that when your main program ends all deamon threads will terminate too.

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

    Thats easiest, but the downside is that you wont get a graceful shutdown (ie the threads will stop, you wont get a chance to peform resource management etc, which may or may not be a problem for you).

    The alternative is to keep a hold on the spawned threads and when your program receives the signal to close you iterate over the threads and pass in a signal of some sort to signa that they too should terminate

    volatile boolean shutdown = false;
    
    public void shutdown() {
       shutdown = true;
    }
    
    public void run() {
        while(!shutdown) { 
            ... do your work here
        }
        ... perform any cleanup work here
    

    (Note: ignores any exception handling for clarity)

    The last option is to use the Executor framework in java.util.concurrent

    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();
    

提交回复
热议问题