1 つのリアルタイム スレッドを Java の通常のスレッドと同期するにはどうすればよいでしょうか? たとえば、いくつかの温度を計算するリアルタイム スレッドと、それらの数値を収集していくつかのコントロールに表示する必要がある GUI スレッドを考えてみましょう。
仕様に従う必要があるため、リアルタイム ライブラリの実装は重要ではありません。
1 つのリアルタイム スレッドを Java の通常のスレッドと同期するにはどうすればよいでしょうか? たとえば、いくつかの温度を計算するリアルタイム スレッドと、それらの数値を収集していくつかのコントロールに表示する必要がある GUI スレッドを考えてみましょう。
仕様に従う必要があるため、リアルタイム ライブラリの実装は重要ではありません。
2 つのことが必要になります。リアルタイムスレッドに優先順位を付け、できればタイマーで駆動して、(ほぼ)定期的な測定値を取得する必要があります。次に、値を伝達するために使用できるリソースが必要になります。これは、タイマー スレッドが書き込むことができるようにクリティカル セクションを備えた単純なモニターにするか、GUI スレッドがいつでも値を消費できるように、FIFO にすることができます。周期があります。
Java では、GUI (少なくとも Swing など) は既に UI インタラクション用に別のスレッドを実行しているため、大きな問題は測定スレッドをセットアップすることです。Runnables を参照してください。
他の人が RTSJ を持ち出したので、リアルタイム コードと非リアルタイム コードの間の同期には多くの解決策があることをコメントします。RTSJ は、このような通信のためのウェイトフリー キューを提供します。これらのキューまたは他のキューに基づいて構築し、RTSJAsyncEvent
とAsyncEventHandler
抽象化を利用して通信を管理することもできます。これは、「リアルタイム」スレッドの決定論的な動作が本当に本当に必要な状況に適しています。
ベストエフォートの行動を受け入れることができる場合 (締め切りに間に合うように一生懸命努力しますが、締め切りを逃しても世界が崩壊することはありません) 、Java 同時実行ユーティリティによって提供されるエグゼキューター フレームワークに基づいて慎重に構築することをお勧めします。タスク境界の慎重な選択、適切なキューイング ポリシー (ここで、「適切」は、指定したよりもアプリケーションに関する詳細に依存します)、およびスレッドプール ポリシーによって、必要なものが得られます。
リアルタイム スレッドを使用するには、リアルタイム オペレーティング システムに Real Time Java が必要です。http://java.sun.com/javase/technologies/realtime/index.jsp
ただし、遅延の影響を受けやすいスレッドがある場合は、お勧めします。