通常のスレッドとのリアルタイムスレッド同期

java real-time real-time-java synchronization

1つのリアルタイムスレッドをJavaの通常のスレッドとどのように同期させるのでしょうか。 たとえば、温度を計算するリアルタイムスレッドと、それらの数値を収集してそれらをいくつかのコントロールに表示する必要があるGUIスレッドを考えてみましょう。

リアルタイムライブラリの実装は、仕様に準拠する必要があるため、重要ではありません。

  6  2


ベストアンサー

あなたは二つのことが必要になるでしょう。 あなたはあなたのリアルタイムスレッドが優先されることを望みます、そしてそれがあなたが(ほぼ)定期的な測定を得るようにタイマーによってそれを運転させることを望みます。 それでは、価値を伝達するために使用できるリソースが必要になります。 それはタイマースレッドがそれに書き込むことができるように重要なセクションを持つ単純なモニターであるかもしれません、あるいはGUIスレッドがそれをするたびにGUIスレッドが値を使い果たすことができるようなFIFOサイクルがあります。

Javaでは、GUI(少なくともSwingなどで)はすでにUIインタラクション用に別のスレッドを実行しているので、大きな問題は測定スレッドを設定することです。 Runnablesを見てください。

4


リアルタイムスレッドを使用するには、リアルタイムオペレーティングシステムにReal Time Javaが必要です。 http://java.sun.com/javase/technologies / realtime / index.jsp

ただし、レイテンシに敏感なスレッドがある場合は、お勧めします。

  • 他のスレッドとの通信に並行性ライブラリーを使用します。

  • GCアクティビティを最小限に抑える(特にフルGC)

  • 可能であれば、GUIと同じプロセスでスレッドを実行しないでください(それを制限する方法で多くのリソースを獲得する傾向があるため)。

2


他の人がRTSJを立ち上げたので、リアルタイムコードと非リアルタイムコードの間の同期には多くの解決策があると私はコメントします。 RTSJは、そのようなコミュニケーションのためにhttp://www.rtsj.org/specjavadoc/javax/realtime/WaitFreeDequeue.html [wait-free queues]を提供しています。 また、これらのキューまたは他のキューを構築し、RTSJの「+ AsyncEvent 」および「 AsyncEventHandler +」抽象化を使用して通信を管理することもできます。 これは、本当に「リアルタイム」スレッドの決定論的な振る舞いを本当に必要としている状況に適しています。

ベストエフォート型の動作を受け入れることができる場合(締め切りに間に合うように本当に努力しますが、失敗しても世界は崩れません)、http://java.sun.com/javaseが提供するexecutorフレームワークを慎重に構築することをお勧めします。 /6/docs/technotes/guides/concurrency/index.html [Java同時実行性ユーティリティー] タスク境界の慎重な選択、適切なキューイングポリシー(ここでは、 “適切な”はあなたのアプリケーションに関するより詳細な情報に依存します)、そしてスレッドプールポリシーはあなたが必要とするものを得るでしょう。

2


タイトルとURLをコピーしました