Java 串行通信和多线程
Java Serial communication and multi-threading
我正在从 Arduino 读取数据到我构建的 Java 程序。我想对数据做的是图形化并同时存储它(可能在 CSV 中)。绘图和存储不应该太难。我担心的是速度足够快,不会丢失任何传入数据。因此,我这里的问题主要是设计问题。
我目前的思考过程:我在 main() 中有一个事件侦听器,它接收所有传入的串行数据并将其放入队列中。我有一个线程(我们称之为线程 A)在另一端等待数据。在将数据保存到文件之前,该线程会立即将数据发送到另一个线程 (B)。线程 B 担心数据的图形化。
但我很好奇,当线程 A 从队列中提取数据时,所有试图从事件侦听器进入的数据会发生什么情况?如果第一个队列很忙并且只是来回交换,我是否应该有另一个队列?
另外,对使用什么类型的队列有什么想法吗?感谢在此领域有经验的人提供的任何意见。
附加信息:我正在研究 Linux (Ubuntu),但希望程序独立于平台。我正在使用 JSSC 库读取串行数据。
您可以使用 Java 的 并发队列 ,因为它们是线程安全的。例如 ConcurrentLinkedDeque
或 ConcurrentLinkedQueue
。如果您不使用并发队列,当您尝试使用多个线程访问队列时,它会抛出 ConcurrentModificationException
。
关于发送数据速度的问题可以通过限制 much/often 您通过串行端口发送的方式来解决。虽然这可能不是问题。
我正在从 Arduino 读取数据到我构建的 Java 程序。我想对数据做的是图形化并同时存储它(可能在 CSV 中)。绘图和存储不应该太难。我担心的是速度足够快,不会丢失任何传入数据。因此,我这里的问题主要是设计问题。
我目前的思考过程:我在 main() 中有一个事件侦听器,它接收所有传入的串行数据并将其放入队列中。我有一个线程(我们称之为线程 A)在另一端等待数据。在将数据保存到文件之前,该线程会立即将数据发送到另一个线程 (B)。线程 B 担心数据的图形化。
但我很好奇,当线程 A 从队列中提取数据时,所有试图从事件侦听器进入的数据会发生什么情况?如果第一个队列很忙并且只是来回交换,我是否应该有另一个队列?
另外,对使用什么类型的队列有什么想法吗?感谢在此领域有经验的人提供的任何意见。
附加信息:我正在研究 Linux (Ubuntu),但希望程序独立于平台。我正在使用 JSSC 库读取串行数据。
您可以使用 Java 的 并发队列 ,因为它们是线程安全的。例如
ConcurrentLinkedDeque
或ConcurrentLinkedQueue
。如果您不使用并发队列,当您尝试使用多个线程访问队列时,它会抛出ConcurrentModificationException
。关于发送数据速度的问题可以通过限制 much/often 您通过串行端口发送的方式来解决。虽然这可能不是问题。