我有一个从套接字服务器读取数据的Java进程。因此,我有一个BufferedReader
和PrintWriter
对应于该套接字的对象。
现在在同一个Java进程中,我有一个接受客户端连接的多线程Java服务器。我想实现一种功能,使我接受的所有这些客户端都可以从BufferedReader
上面提到的对象中读取数据。(以便它们可以复用数据)
如何使这些单独的客户端线程从BuffereReader单个对象读取数据?对困惑感到抱歉。
我强烈建议他们不要BufferedReader
直接访问。假设您知道数据的格式,并且每个客户端都尝试读取相同的格式(如果不是这样,那么我根本看不到它如何工作),我建议创建一个线程来从BufferedReader
and中读取把工作物品放在一个Queue
。有很多在Java中使用生产者/消费者队列的示例,这也可能使测试客户端代码更加容易。
只有一个线程访问该BufferedReader
方法,您无需担心定义所有其他线程都必须满足的原子操作-您的读取线程通过决定将工作项添加到队列中来有效地定义该操作。
编辑:如果所有客户都应该看到所有数据,这进一步加强了我建议使用单个读取器的建议-除了Queue
要从其中删除项目的数据之外,您将拥有一个客户可以读取所有数据的集合来自的现有数据。您需要使用适当的线程安全集合,但是Java中有很多这样的集合。
编辑:刚刚阅读了您的评论,其中说每个客户都应该看到阅读器中读取的最后一个项目,这使事情变得更加容易。有一个线程读取数据,但是只需保留一个变量,并引用“最后读取的项目”。您可能想要同步对其的访问,或者使用AtomicReference
,但是两者都很容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句