java - 处理流数据、更新 GUI、使用线程,并且不错过任何一个节拍?

标签 java multithreading bluetooth streaming

这个问题是半理论问题,半如何正确编码的问题。

我正在考虑用 Java 制作一个应用程序,该应用程序将接受流数据,并在数据进入时更新 GUI。

所以,我想做的就是在 Java 中生成线程,这将:

  1. 收集 X 毫秒的数据,
  2. 获取新数据并用其更新 GUI
  3. 同时启动一个新线程,收集X毫秒的数据
  4. 这个新线程必须从第一个线程开始的地方开始

同时,程序的所有其他部分也在它们自己的线程中进行。

因此,我需要确保线程不会发生冲突,混合中不会丢失任何数据,并且我需要了解速度限制。假设数据以 1 Gbs 与 1 Mbs 的速度传入,这会产生什么编程差异?

特定应用程序包括来自蓝牙的数据以及通过 HTTPS REST API 从互联网传入的数据

如果有人有例子,无论是在线的还是这里快速而肮脏的东西,那就太好了。我的 Google 搜索结果毫无结果..

最佳答案

这个问题相当广泛,但从架构的角度来看,我认为如果将其更改为一个线程从设备读取并将数据放入缓冲区,然后一个线程从该缓冲区读取并更新,那么复杂性会大大降低用户界面。这减少了需要处理同时访问它的多个线程的代码(理想情况下它会将其减少到您使用的缓冲区)并使同步变得更加容易。它还将数据的获取与显示分离开来。

写入缓冲区可以从使用 PipedInputStream 和 PipedOutputStream 开始,但是在我的一个项目中,如果您确实想提供实时处理和显示,结果证明它不够快,因此您最终可能会自己编写一个低延迟缓冲类。

关于java - 处理流数据、更新 GUI、使用线程,并且不错过任何一个节拍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14951988/

相关文章:

linux - Bluez 5.48 - 如何强制蓝牙传输状态从事件到空闲 - 嵌入式接收器端

java - 秒转换器.java :19: error: incompatible types: String cannot be converted to int

c# - 为什么选择 System.Threading 而不是 BackgroundWorker?

c++ - pthread 堆栈变量内存泄漏

c++ - volatile 和多线程?

java - 安卓 & 蓝牙 & Arduino

android - 通过蓝牙接收消息到 raspberrypi

java - 使用.cer证书发出HTTPS请求

java - vector 中的 vector ... Java

java - 在 ExecutorService 上使用响应式编程有什么好处?