6

如何将一个实时线程与 Java 中的普通线程同步?以计算一些温度的实时线程和必须收集这些数字并在某些控件上显示它们的 GUI 线程为例。

实时库的实现应该无关紧要,因为它应该遵循规范。

4

3 回答 3

4

你将需要两件事。您希望您的实时线程获得优先权,并且最好让它由计时器驱动,以便您获得(几乎)定期测量。然后,您将需要一种可用于传达价值观的资源。这可以是一个简单的监视器,带有一个关键部分,以便计时器线程可以写入它,或者它可以是 - 并且很可能会更好 - 一个 FIFO,以便 GUI 线程可以在任何时候吃掉值有循环。

在 Java 中,GUI(至少在 Swing 和类似中)已经为 UI 交互运行了一个单独的线程,所以你的大问题是设置你的测量线程。看看 Runnables。

于 2009-02-14T05:11:50.040 回答
2

To use real-time threads you need Real Time Java on real time operating system. http://java.sun.com/javase/technologies/realtime/index.jsp

However if you have a thread which is latency sensitive, I suggest you;

  • use the concurrency libraries in communications with other threads.
  • minimise any GC activity (esp full GCs)
  • don't run the thread in the same process as a GUI if you can (as it tends grab a lot of resources in ways you have limited control over)
于 2009-02-14T08:04:37.127 回答
2

由于其他人提出了 RTSJ,我将评论实时和非实时代码之间的同步有许多解决方案。RTSJ 为此类通信提供无等待队列。也可以建立在这些或其他队列之上,并利用 RTSJAsyncEventAsyncEventHandler抽象来管理通信。这适用于您确实需要“实时”线程的确定性行为的情况。

如果您可以接受尽力而为的行为(非常努力地按时完成,但如果您错过了世界也不会分崩离析),我建议您在 Java 并发实用程序提供的执行器框架上谨慎构建。仔细选择任务边界、合适的队列策略(这里,“合适”将取决于您的应用程序的更多细节,而不是您提供的),线程池策略将得到您需要的东西。

于 2009-04-10T02:20:12.183 回答