gpt4 book ai didi

java - 如何让当前线程等待另一个线程完成后再继续?

转载 作者:行者123 更新时间:2023-12-02 10:23:08 25 4
gpt4 key购买 nike

我已经分派(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/

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