java在线程之间共享数据

阿育:

我有一个从套接字服务器读取数据的Java进程。因此,我有一个BufferedReaderPrintWriter对应于该套接字对象。

现在在同一个Java进程中,我有一个接受客户端连接的多线程Java服务器。我想实现一种功能,使我接受的所有这些客户端都可以从BufferedReader上面提到对象中读取数据。(以便它们可以复用数据)

如何使这些单独的客户端线程从BuffereReader单个对象读取数据?对困惑感到抱歉。

乔恩·斯基特(Jon Skeet):

我强烈建议他们不要BufferedReader直接访问假设您知道数据的格式,并且每个客户端都尝试读取相同的格式(如果不是这样,那么我根本看不到它如何工作),我建议创建一个线程来从BufferedReaderand中读取把工作物品放在一个Queue很多在Java中使用生产者/消费者队列的示例,这也可能使测试客户端代码更加容易。

只有一个线程访问该BufferedReader方法,您无需担心定义所有其他线程都必须满足的原子操作-您的读取线程通过决定将工作项添加到队列中来有效地定义该操作。

编辑:如果所有客户都应该看到所有数据,这进一步加强了我建议使用单个读取器的建议-除了Queue要从其中删除项目的数据之外,您将拥有一个客户可以读取所有数据集合来自的现有数据。您需要使用适当的线程安全集合,但是Java中有很多这样的集合。

编辑:刚刚阅读了您的评论,其中说每个客户都应该看到阅读器中读取的最后一个项目,这使事情变得更加容易。有一个线程读取数据,但是只需保留一个变量,并引用“最后读取的项目”。您可能想要同步对其的访问,或者使用AtomicReference,但是两者都很容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章