Concurrency 与JavaFX工作线程和PropertyChangeSupport的竞争条件

Concurrency 与JavaFX工作线程和PropertyChangeSupport的竞争条件,concurrency,javafx,Concurrency,Javafx,我正在开发一个在JavaFX任务中使用多个工作线程的系统。任务内部这些线程上的可调用对象使用PropertyChangeSupport将某些状态更改信息传递回侦听器(例如,中间结果)。我正在使用PropertyChangeListeners监视这些更改,并从中创建其他对象可以访问的派生对象。任务完成后,我将使用JavaFX显示信息,其中一些信息是从发出的PropertyChange事件中收集的 我的问题是:在任务完成和处理PropertyChangeEvents之间是否存在竞争条件(我假设这会发

我正在开发一个在JavaFX任务中使用多个工作线程的系统。任务内部这些线程上的可调用对象使用PropertyChangeSupport将某些状态更改信息传递回侦听器(例如,中间结果)。我正在使用PropertyChangeListeners监视这些更改,并从中创建其他对象可以访问的派生对象。任务完成后,我将使用JavaFX显示信息,其中一些信息是从发出的PropertyChange事件中收集的

我的问题是:在任务完成和处理PropertyChangeEvents之间是否存在竞争条件(我假设这会发生在JavaFX应用程序线程上,但不是完全确定)

作为一个具体的例子,考虑一个被分割成块的图像,用于多个步骤的处理。在每个步骤中,都会生成一个中间映像,并为该中间映像触发propertyChange事件。在处理结束时,我希望能够在JavaFX场景中显示最终图像以及同时生成的所有图像。在FX线程重新绘制/刷新之前是否会处理propertyChange事件

我意识到JavaFX文档有一个例子,其中任务api文档讨论返回中间结果()。该示例使用JavaFXObservable*对象。我认为PropertyChangeEvents将在与FX observable对象类似的同一个线程上运行,因此在完成非FX线程和在FX线程上获得结果之间不应该存在竞争条件,但我想我会看看是否有什么我可能没有想到的

提前感谢您的讨论或想法


您认为PropertyChangeEvents将与FX可观察对象在同一线程上运行是正确的。然而,这是一个与任务本身不同的线程

但是,您不能保证所有propertyChange事件都会在FX线程重新绘制/刷新之前得到处理。事实上,显示器的各个部分可能会在不同的propertyChange事件之间被重新绘制多次,这取决于所需的时间和所涉及的具体时间。此外,其他的FX事件也可能出现在propertyChange事件和重新绘制之间。但是,应该保证由任何给定的propertyChange事件更新的任何UI元素最终都会在更新后的某个时间重新绘制。因此,显示最终将“跟上”propertyChange处理程序所做的任何更改,并最终重新绘制任何已更改的区域