1

ここでは純粋に概念的な話をします。

何かを行うリスナーがアタッチされたクラスがあります。そのクラスから構築されたオブジェクトの配列全体があります

foo()また、その配列にアクセスしてから別のことを行う静的メソッドもあります

何かのことをするとリスナーがトリガーされ、何かが完了するまで他のことを一時停止しなければ、コードは機能しません。リスナーがいつトリガーされるかを知っています。foo()

また、リスナーには、同じクラスから構築された別のオブジェクトでリスナーを直接呼び出す機能があります。foo()これが起こるかどうか、または何回起こるかはわかりません。

では、リスナーが実行されるのを強制的foo()に待機し、リスナーが連鎖反応をトリガーしていない場合は、中断したところから続行するか、トリガーされたリスナーの実行が完了するのを待つにはどうすればよいでしょうか?

4

2 に答える 2

2

これは概念的なものであり、正確な答えを突き止めるのは難しいためLocksConditions http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.htmlについて読むことをお勧めします. これらは、探している機能を提供する場合があります。

于 2013-09-10T03:21:07.273 に答える
1

追加のリスナーの使用を検討できます。

  • foo()「リスナー」が状態を変更しているものに PropertyChangeListener を追加できます。それをモデルと呼びましょう。
  • 次に、モデルを作成し、状態が変化したことを PropertyChangeSupport で通知メソッドを起動して、タスクが完了したときに foo に通知します。
  • その後、アクションが完了した後、foo はそのリスナーを削除できます。
于 2013-09-10T03:24:30.027 に答える