java在线程之间共享数据

ayu*_*ush 4 java client multithreading thread-safety

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

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

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

Jon*_*eet 6

我强烈建议他们不要BufferedReader直接访问.假设你知道数据的格式,并且每个客户端都试图读取相同的格式(如果不是这种情况,我看不出它是如何工作的)我建议创建一个线程来读取BufferedReader和将工作项目放入Queue.在Java中有很多使用生产者/消费者队列的例子,这也可能使测试客户端代码变得更容易.

只有一个线程访问BufferedReader意味着你不必担心定义一个所有其他线程必须内容的原子操作 - 你的阅读线程通过决定将一个工作项添加到队列来有效地定义该操作.

编辑:如果所有的客户端都应该看到的所有数据,从而加强我更进一步具有单个读者的建议-除了,而不是有Queue哪些项目从删除的数据,你就会有一个收集其客户端可以读取所有的来自的现有数据.您需要使用适当的线程安全集合,但Java中有很多这样的集合.

编辑:刚看完你的评论说每个客户应该只看到从阅读器读取的最后一项,这使它更容易.让一个线程读取数据,但只保留一个变量,引用"最后读取的项目".您可能要么同步对它的访问或使用AtomicReference,但这两者都很容易.