将数据从多个线程发送到单个线程

Gab*_*des 6 java sockets multithreading

我正在编写一个连接到Arduino的Java套接字服务器,后者又发送和接收数据.如Java套接字文档所示,我已设置服务器为每个连接打开一个新线程.

我的问题是,我如何能够将数据从套接字线程发送到我的主线程?套接字将不断打开,因此必须在线程运行时发送数据.有什么建议吗?

更新:服务器的目标是向Arduino发送命令(即打开或关闭灯光)并从传感器接收数据,因此我需要一种方法从连接到各个线程的传感器获取数据并发送他们分成一个.

voh*_*oho 3

在线程之间共享数据总是很棘手。没有“正确”的答案,这完全取决于您的用例。我想您并不是在追求最高的性能,而是在追求易用性,对吗?

对于这种情况,我建议您查看同步集合、映射、列表或队列。ConcurrentLinkedQueue是一个看起来很适合您的类。

您还可以使用 Collections 类中的工厂方法为所有常用集合创建同步代理:

    Collections.synchronizedList(new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)

您不必同步对它们的访问。

另一种选择是使用数据库,这可能有点过分了。有一些内存数据库,例如 H2。

无论如何,我建议您将共享信息量降低到尽可能低的水平。例如,您可以将每个线程的“原始”数据分开(例如在ThreadLocal变量中),然后在聚合期间进行同步。