Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与普通线程的实时线程同步_Java_Synchronization_Real Time_Real Time Java - Fatal编程技术网

Java 与普通线程的实时线程同步

Java 与普通线程的实时线程同步,java,synchronization,real-time,real-time-java,Java,Synchronization,Real Time,Real Time Java,在Java中,如何将一个实时线程与一个普通线程同步?例如,计算某些温度的实时线程和必须收集这些数字并在某些控件上显示这些数字的GUI线程 实时库的实现并不重要,因为它应该遵循规范。您需要两件事。您希望实时线程获得优先级,最好让它由计时器驱动,以便获得(几乎)定期测量。然后,您需要一个可以用来传递值的资源。它可以是一个简单的监视器,带有一个关键部分,这样计时器线程就可以写入它,或者它可以是一个FIFO,这样GUI线程就可以在有周期的时候吃掉值 在Java中,GUI(至少在Swing和类似的应用程序

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


实时库的实现并不重要,因为它应该遵循规范。

您需要两件事。您希望实时线程获得优先级,最好让它由计时器驱动,以便获得(几乎)定期测量。然后,您需要一个可以用来传递值的资源。它可以是一个简单的监视器,带有一个关键部分,这样计时器线程就可以写入它,或者它可以是一个FIFO,这样GUI线程就可以在有周期的时候吃掉值


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

要使用实时线程,您需要在实时操作系统上使用实时Java

但是,如果你有一个线程是延迟敏感的,我建议你

  • 在与其他线程通信时使用并发库
  • 尽量减少任何GC活动(特别是完整GC)
  • 如果可以的话,不要在与GUI相同的进程中运行线程(因为它往往会以您控制有限的方式占用大量资源)

由于其他人提出了RTSJ,我要指出,实时和非实时代码之间的同步有很多解决方案。RTSJ提供了此类通信。还可以在这些或其他队列的基础上构建,并利用RTSJ的
AsyncEvent
AsyncEventHandler
抽象来管理通信。这适用于您确实需要“实时”线程的确定性行为的情况

如果你能接受尽力而为的行为(尽最大努力达到你的最后期限,但如果你错过了,世界不会崩溃),我建议你仔细构建由提供的executor框架。仔细选择任务边界、合适的排队策略(此处“合适”取决于应用程序比您给出的更详细的信息)和线程池策略将得到您所需要的