JavaFX タスク内で複数のワーカー スレッドを使用するシステムで作業しています。Task 内のこれらのスレッドの Callable オブジェクトは、PropertyChangeSupport を使用して、特定の状態変更情報をリスナーに返します (中間結果など)。私は PropertyChangeListeners を使用してこれらの変更を監視し、他のオブジェクトからアクセスされる派生オブジェクトを作成しています。タスクが終了したら、JavaFX を使用して情報を表示します。その一部は、発行される PropertyChange イベントから収集されます。
私の質問は、Task の終了と処理される PropertyChangeEvents の間に競合状態が発生する可能性があるかどうかです (これは JavaFX アプリケーション スレッドで発生すると想定しますが、完全にはわかりません)。
具体的な例として、複数のステップで処理するためにチャンクに分割される画像を考えてみましょう。各ステップで、中間イメージが生成され、その中間イメージに対して propertyChange イベントが発生します。処理の最後に、最終的な画像とその間に生成されたすべての画像を JavaFX シーンに表示できるようにしたいと考えています。FX スレッドが再描画/更新する前に、propertyChange イベントはすべて処理されますか?
JavaFXのドキュメントには、中間結果を返すことについて説明しているTask APIドキュメントの例があります( JavaFX Task API Documentation )。この例では、JavaFX Observable* オブジェクトを使用しています。PropertyChangeEvents は FX 観測可能オブジェクトと同様に同じスレッドで実行されるため、FX 以外のスレッドの終了と FX スレッドでの結果の取得との間に競合状態があってはならないと思いますが、私が考えていないかもしれない何か。
議論や考えをお寄せいただきありがとうございます。
- チョーク