我正在开发一个在 JavaFX 任务中使用多个工作线程的系统。Task 内部这些线程上的 Callable 对象使用 PropertyChangeSupport 将某些状态更改信息传回给侦听器(例如中间结果)。我正在使用 PropertyChangeListeners 来监视这些更改并从中创建衍生对象,以供其他对象访问。任务完成后,我将使用 JavaFX 显示信息,其中一些信息是从发出的 PropertyChange 事件中收集的。
我的问题是:Task 完成和 PropertyChangeEvents 被处理之间是否存在竞争条件(我认为这会发生在 JavaFX 应用程序线程上,但不完全确定)。
作为一个具体的例子,考虑一个图像被分割成块以便在多个步骤中进行处理。在每个步骤中,都会生成一个中间图像,并为该中间图像触发一个 propertyChange 事件。在处理结束时,我希望能够在 JavaFX 场景中显示最终图像以及同时生成的所有图像。propertyChange 事件会在 FX 线程重绘/刷新之前得到处理吗?
我意识到 JavaFX 文档中有一个 Task api doc 示例讨论返回中间结果(JavaFX Task API Documentation)。该示例使用 JavaFX Observable* 对象。我认为 PropertyChangeEvents 将在类似于 FX 可观察对象的同一线程上运行,因此在完成非 FX 线程和在 FX 线程上获得结果之间不应该存在竞争条件,但我想我会看看是否有任何我可能没有想到的东西。
提前感谢您的任何讨论或想法。
- 丘克斯