6

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

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

4

3 に答える 3

4

2 つのことが必要になります。リアルタイムスレッドに優先順位を付け、できればタイマーで駆動して、(ほぼ)定期的な測定値を取得する必要があります。次に、値を伝達するために使用できるリソースが必要になります。これは、タイマー スレッドが書き込むことができるようにクリティカル セクションを備えた単純なモニターにするか、GUI スレッドがいつでも値を消費できるように、FIFO にすることができます。周期があります。

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

于 2009-02-14T05:11:50.040 に答える
2

他の人が RTSJ を持ち出したので、リアルタイム コードと非リアルタイム コードの間の同期には多くの解決策があることをコメントします。RTSJ は、このような通信のためのウェイトフリー キューを提供します。これらのキューまたは他のキューに基づいて構築し、RTSJAsyncEventAsyncEventHandler抽象化を利用して通信を管理することもできます。これは、「リアルタイム」スレッドの決定論的な動作が本当に本当に必要な状況に適しています。

ベストエフォートの行動を受け入れることができる場合 (締め切りに間に合うように一生懸命努力しますが、締め切りを逃しても世界が崩壊することはありません) 、Java 同時実行ユーティリティによって提供されるエグゼキューター フレームワークに基づいて慎重に構築することをお勧めします。タスク境界の慎重な選択、適切なキューイング ポリシー (ここで、「適切」は、指定したよりもアプリケーションに関する詳細に依存します)、およびスレッドプール ポリシーによって、必要なものが得られます。

于 2009-04-10T02:20:12.183 に答える
2

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

ただし、遅延の影響を受けやすいスレッドがある場合は、お勧めします。

  • 他のスレッドとの通信で同時実行ライブラリを使用します。
  • GC アクティビティを最小限に抑える (特にフル GC)
  • 可能であれば、GUI と同じプロセスでスレッドを実行しないでください (制御が制限された方法で多くのリソースを取得する傾向があるため)。
于 2009-02-14T08:04:37.127 に答える