データを独立スレッドにリアルタイムで収集するAPIを作成したとします。データアクセスはスレッドセーフで、インターフェイス経由で行われます。例えば。 getData()
はブロックされず、最新の情報を提供します。このAPIは、多くのアプリケーションで使用されています。いくつかのGUI駆動、他のコンソールプログラム。Java:自分のAPIでイベント通知のオプションは何ですか?
アプリケーションにデータ更新があったことを通知するには、どのようなオプションが必要ですか?私たちは間違いなくAPIがアプリケーションに依存しないようにするため、fireTableDataChanged()
またはそのようなAPIのものは望ましくありません。 (GUIアプリケーションでは、APIが私たちに通知した後、またはAPIを見てからfireTableDataChanged()
などと呼ぶでしょう)
ありがとう!
+1 - 恐ろしいほど、私は「自分で実装する」といいます。オブザーバーを定期的に追加したり削除したりする場合は、java.awt.AWTEventMulticasterで使用されるスレッドセーフイベントマルチキャストロジックの後でEventProducerをモデリングして最適化することができます。 –
<の解析を修正するように編集されました。 @ティム、私はそのような共通のパターンのために "あなた自身の実装"がひどいと思うことに同意します。標準がない場合、1つの社内実装は、多くの異なるクラスごとの実装よりも優れています(いくつかの不幸な経験から)。私は、リスナーの追加/削除が最適化される必要がある状況に遭遇したことはありません。 AWTEventMulticasterは、Java並行処理パッケージおよびCopyOnWriteArrayListenerの日付を事前に設定しています。これにより、シンプルで読みやすいスレッドセーフな実装が可能になります。 –
あなたの答えに感謝します。あなたが概説したものを実装するのか、それとも 'getData()'をブロックするようにAPIをポーリングするのかをどうやって決めますか?問題は何ですか? – Pete