作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经分派(dispatch)了一个新线程来处理与 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.");
关于java - 如何让当前线程等待另一个线程完成后再继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54183369/
我是一名优秀的程序员,十分优秀!