我已经调度了一个新线程来处理一些与 Swing GUI 相关的执行。然而,一旦这个线程完成它的任务,所有的执行就会停止。具体来说,在下面的代码中,最终的打印语句没有被执行。为什么会这样?新线程完成操作后如何继续执行?如果这是一个愚蠢的问题,任何多线程资源建议?
另外,只是一点背景知识:我的程序同时包含 JavaFX 和 Swing GUI,这就是为什么第一个线程是 JavaFX 线程的原因。我目前正在尝试更新 Swing GUI,然后继续执行。
谢谢您的帮助。
System.out.println("Thread: " + Thread.currentThread());
//prints "Thread : [JavaFX Application Thread,5,main]"
new Thread(new Task<Void>(){
@Override protected Void call() throws Exception{
System.out.println("Thread: " + Thread.currentThread());
//prints "Thread : [Thread-6,5,main]"
updateData();
updateSwingGUI();
return null;
}
}).start();
System.out.println("I'm not being executed");
如果您想阻塞当前线程,直到另一个线程完成其任务,也许在单独的线程上执行任务实际上毫无意义,您没有实现任何并行性。
您Task
甚至没有返回任何内容,因此在返回第二个线程的结果之前,甚至没有其他理由阻止。
如果您仍然想并行执行它并阻止等待任务完成,则可以使用以下命令:
System.out.println("Thread: " + Thread.currentThread());
Thread thread = new Thread(() -> {
System.out.println("Thread: " + Thread.currentThread());
updateData();
updateSwingGUI();
}).start();
System.out.println("I'm on the old thread, can do something in parallel.");
thread.join();
System.out.println("Second thread finished updating GUI.");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句