在javafx中使用物理线程处理计算的最佳方法是什么

时间:2016-08-05 20:43:42

标签: java multithreading javafx simulation

我正在javafx制作一个小型的3D物理仿真程序,我在一个单独的线程中研究了各种方法进行物理计算,但是在多线程方面经验很少,我发现很难找到计算物理的最佳方法并将它们传递给javafx应用程序

所以我的问题是

在javafx中进行背景计算的最佳方法是什么?

如何在物理线程和javafx应用程序之间同步和传递数据?

1 个答案:

答案 0 :(得分:1)

阅读JavaFX并发文档:Concurrency in JavaFXjavafx.concurrent.TaskPlatform.runLater。我不会在这里重新解释,因为您需要的所有基本信息都在官方文档IMO中。有关其他信息,您只需谷歌搜索JavaFX线程和并发,这将提出许多stackoverflow问题,提供有关此主题的更多信息。

考虑一下你是否真的需要自己的线程。可能,the physics calculations can be performed quickly on the JavaFX application thread和你自己的线程不是必需的。

  

它是一个多重物体的三维重力模拟> 1000,所以当我进行物理计算时,我的表现确实下降了。

您可以使用fork/join的任务并行执行计算。完成所有计算后,您可以进行Platform.runLater调用以根据更新的计算更新UI。

请注意,正确实现fork / join可能对您来说很复杂。您可能想尝试在自己的任务中运行计算,并在完成添加像fork / join之类的额外复杂性之前调用Platform.runLater。

  

实现我的主循环的最佳方法是如上所述我尝试了Timeline和AnimationTimer,我读过AnimationTimer应该更好但是还有其他选择吗?

正如你所述,当JavaFX线程上的所有内容完成时,性能下降太多,那么Timeline和AnimationTimer都不会帮助你在JavaFX应用程序线程上执行它们的工作。如果您愿意,可以尝试使用如上所述的Platform.runLater调用方法。