JavaFX:工作线程需要 JavaFX 应用线程才能继续

标签 java multithreading concurrency javafx

工作线程用于处理长时间运行的任务。在任务执行过程中,需要用户交互来获取输入。当提供输入时,工作线程将恢复执行。我的问题是,工作线程需要挂起,获取输入(我们应该通过对话框说 - 我正在使用 JDK8u40 的对话框 API,它必须由 JavaFX 应用程序线程提供便利),然后恢复。由于某些情况的依赖性,一开始不提供输入,并且可能需要多次输入。

一个典型的例子是,文件从一个目录复制到另一个目录。在复制文件时,目标目录中存在具有相同文件名的文件,因此需要用户交互来重命名该文件或跳过文件复制以避免文件名冲突。在这种情况下,工作线程应该执行文件复制,并且需要暂停以获取用户的输入(必须由 JavaFX 应用程序线程促进),然后再继续。 Platform.runlater(() -> {});不能做这种情况,因为它只会将 Runnable 对象排队以便在将来的某个时间运行。

如何促进这种情况?我是 JavaFX 并发的新手。

最佳答案

您可以使用等待通知机制,如下所述:http://www.avajava.com/tutorials/lessons/how-do-i-use-the-wait-and-notify-methods.html 。 当需要交互时,将通过 ui 线程启动可运行对象来提示用户。工作线程调用 wait。 ui 线程最终获取用户输入并通知工作线程,工作线程根据收到的消息继续其工作。这里的区别在于,您不需要创建两个线程,因为 ui 线程已经存在。

关于JavaFX:工作线程需要 JavaFX 应用线程才能继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712135/

相关文章:

java - 生产者消费者模式设计问题

c# - C# Parallel.ForEach 的工作何时完成?

c - 如何防止任务从一个 CPU 转移到另一个 CPU?

Java - JEditorPane - 超链接问题

Java 声音 : Getting default microphone port

java - 将文本文件值分配给动态创建的 jTextFields

java - 使变量 volatile 是否可以消除 : Multithreaded correctness - Inconsistent synchronization

java - StringBuffer 未完全读取

c++ - 修改顺序是否有助于 happens-before 关系?

java - 如何管理执行者