0

我有一个多线程服务器,它等待从多个客户端采样并发送到服务器的一组参数。每个客户端定期将其参数发送到它所连接的服务器线程。另一个线程(可能是实例化单个 ThreadServer 以管理与客户端的连接的 ServerManager)必须等待从所有客户端接收到参数,并且仅在执行其余部分之后。什么是最适合分析从连接到服务器端的所有客户端接收更新参数的同步机制(假设有固定数量的客户端)?最明显的解决方案是对指示参数当前状态的数组进行轮询......但我认为使用条件变量或类似的东西会更好。

4

2 回答 2

0

如果确实是线程 A 等待线程 B、C 和 D 的问题,并且您不必担心或跟踪 B 发送两次(因此启动了 2 个潜在事务),那么您可以使用 CountdownLatch。当每个客户端更新“全局”参数结构时,它们会倒数锁存器。当闩锁变为零时,等待线程被释放并可以继续前进。

您需要为每个批次重新创建闩锁,这仅适用于单个事务(否则,如果构建得天真,线程 B 可以倒计时两次闩锁)。所以你需要一些其他的约束来防止这种情况发生。

于 2013-11-11T21:23:01.320 回答
0

向所有侦听客户端数据的线程传递对 a 的引用,java.util.concurrent.LinkedBlockingQueue以将客户端数据写入并在侦听器/轮询线程中收集/分析客户端数据(引用相同的队列)。

于 2013-11-11T21:09:24.040 回答