从不同的线程同步请求JavaFX线程内的数据

PAX*_*PAX 0 multithreading synchronization javafx

我有一个单独的线程需要请求一些可能在此期间在JavaFX线程内发生变化的数据.我想在这个单独的线程中执行一个阻塞调用,以确保请求被引入JavaFX线程.

Swing-GUI测试框架AssertJ为此提供了一个易于使用的API:

List list = GuiActionRunner.execute(new GuiQuery<...>...);
Run Code Online (Sandbox Code Playgroud)

调用阻塞当前线程,在事件调度线程中执行传递的代码并返回所需的数据.

如何在JavaFX应用程序的生产代码中实现?这个要求的推荐方法是什么?

Jam*_*s_D 5

这是一个替代解决方案,使用FutureTask.这避免了显式锁存和管理同步数据AtomicReference.这里的代码可能很简单,它会使这个功能包含在Platform冗余中.

FutureTask<List<?>> task = new FutureTask<>( () -> {
    List<?> data = ... ; // access data 
    return data ;
});
Platform.runLater(task);
List<?> data = task.get();
Run Code Online (Sandbox Code Playgroud)

如果要暂停后台线程以等待用户输入,此技术非常有用.