工作线程用于处理非常长时间运行的任务。在任务执行的中间,需要用户交互来获取输入。随着输入的提供,工作线程将继续执行。我的问题是,工作线程需要暂停,获取输入(我们应该通过对话框说 - 我使用JDK8u40的Dialogs API,必须由JavaFX应用程序线程促进),然后恢复。由于某些情况的依赖性,在开始时不提供输入,并且可能需要多次输入。
一个典型的例子是,文件正在从一个目录复制到另一个目录。复制文件时,目标目录中存在具有相同文件名的文件,因此需要用户交互来重命名文件或跳过文件复制以避免文件名冲突。在这种情况下,工作线程应该执行文件复制,并且需要暂停以从用户获取输入(必须由JavaFX应用程序线程促进)才能继续。 Platform.runlater(() - > {});不能做这种情况,因为它只是将Runnable对象排队等待将来某个时候运行。
如何促进这种情况?我是JavaFX并发的新手。
答案 0 :(得分:1)
您可以使用此处所述的等待通知机制:http://www.avajava.com/tutorials/lessons/how-do-i-use-the-wait-and-notify-methods.html。 当需要交互时,通过ui线程启动runnable以提示用户。工作线程调用wait。 ui线程最终获取用户输入并通知工作线程根据收到的消息继续其工作。这里的区别在于你不需要创建两个线程,因为ui线程已经存在。