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应用程序的生产代码中实现?这个要求的推荐方法是什么?
这是一个替代解决方案,使用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)
如果要暂停后台线程以等待用户输入,此技术非常有用.
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |