Java串行通信和多线程

标签 java multithreading serial-port blockingqueue

我正在将数据从 Arduino 读取到我构建的 Java 程序中。我想对数据做的是图表并同时存储它(可能在 CSV 中)。绘图和存储应该不会太难。我担心的是速度足够快,以免丢失任何传入数据。因此,我在这里的问题主要是设计问题。

我当前的思考过程:我在 main() 中有一个事件监听器,它获取所有传入的串行数据并将其放入队列中。我有一个线程(我们称之为线程 A)在另一端等待数据。该线程会立即将数据发送到另一个线程 (B),然后再将其保存到文件中。线程 B 担心绘制数据图。

但是我很好奇,当线程 A 从队列中提取数据时,尝试从事件监听器进入的所有数据会发生什么情况?如果第一个队列很忙并且只是来回交换,我是否应该有另一个队列?

另外,对于使用什么类型的队列有什么想法吗?感谢在该领域有经验的人提供的任何意见。

其他信息:我正在 Linux (Ubuntu) 上工作,但希望该程序独立于平台。我正在使用 JSSC 库来读取串行数据。

最佳答案

  1. 您可以使用 Java 的并发队列,因为它们是线程安全的。例如ConcurrentLinkedDeque或ConcurrentLinkedQueue。如果您不使用并发队列,当您尝试使用多个线程访问队列时,它会抛出 ConcurrentModificationException

  2. 关于发送数据的速度的问题可以通过限制通过串行端口发送的数量/频率来解决。尽管这可能不是问题。

关于Java串行通信和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29051585/

相关文章:

java - 在 Java 中定义多线程

java - 如何在 Windows 上用 Java 读/写串口?

c# - 不在 C# 中读取完整的串口数据

linux - 如何使用Qextserialport在串口上写

java - Jackson - 使用动态 key 反序列化 json

java - REST 服务器到客户端的通信

java - JAX-WS 和 SharePoint 用户组 Web 服务

java - 如何安装 Unlimited Strength Jurisdiction 策略文件?

c - 客户端/服务器程序中的线程

java - 为什么要同时使用 boolean 值和 interrupt() 来指示线程终止?