【发布时间】:2009-02-14 00:32:24
【问题描述】:
如何将一个实时线程与 Java 中的普通线程同步?以计算一些温度的实时线程和必须收集这些数字并在某些控件上显示它们的 GUI 线程为例。
实时库的实现并不重要,因为它应该遵循规范。
【问题讨论】:
标签: java synchronization real-time real-time-java
如何将一个实时线程与 Java 中的普通线程同步?以计算一些温度的实时线程和必须收集这些数字并在某些控件上显示它们的 GUI 线程为例。
实时库的实现并不重要,因为它应该遵循规范。
【问题讨论】:
标签: java synchronization real-time real-time-java
你需要两件事。您希望您的实时线程获得优先级,并且最好让它由计时器驱动,以便获得(几乎)定期测量。然后,您将需要一种可用于传达价值观的资源。这可以是一个简单的监视器,带有一个关键部分,以便计时器线程可以写入它,或者它可以是 - 并且很可能会更好 - 一个 FIFO,以便 GUI 线程可以在任何时候吃掉值有循环。
在 Java 中,GUI(至少在 Swing 和类似中)已经为 UI 交互运行了一个单独的线程,所以您的大问题是设置您的测量线程。看看 Runnables。
【讨论】:
要使用实时线程,您需要实时操作系统上的 Real Time Java。 http://java.sun.com/javase/technologies/realtime/index.jsp
但是,如果您有一个对延迟敏感的线程,我建议您;
【讨论】:
由于其他人提出了 RTSJ,我将评论实时和非实时代码之间的同步有许多解决方案。 RTSJ 为此类通信提供wait-free queues。也可以在这些或其他队列的基础上构建并利用 RTSJ 的 AsyncEvent 和 AsyncEventHandler 抽象来管理通信。这适用于您真正需要“实时”线程的确定性行为的情况。
如果你能接受尽力而为的行为(努力赶上你的最后期限,但如果你错过了世界也不会崩溃),我建议在the Java concurrency utilities 提供的执行器框架上谨慎构建。仔细选择任务边界、合适的队列策略(这里,“合适”取决于您的应用程序的详细信息,而不是您提供的),线程池策略将满足您的需求。
【讨论】: