繁体   English   中英

JAVA:使用相同的套接字在多个线程上管理DataInputStream

[英]JAVA: managing DataInputStream on multiple threads using same socket

所以基本上我有一个主线程接受套接字并创建一个DataInputStream对象来接收数据,然后将这个Input对象传递给不同的子线程,在那里他们将使用它来接收数据并执行不同的任务。 但这不起作用,因为两个线程都使用相同的对象来监听,所以当用户发送一些我不知道谁会读它的东西时......我的想法到目前为止:

1-创建一些接收传入请求的组织器,并将它们重定向到负责的线程(我不确定如何这样做)。

2-当一个线程期望一系列传入请求(基于时间)时,它必须睡眠另一个线程,以便它可以接管输入流(我不确定它是否可以完成)。

还有其他任何想法或如何实现其中任何一个? 谢谢!

(在最坏的情况下,我必须加入两个线程..)

我建议你使用ReadWriteLock ,深入了解它的api和例子。 对于这种连接线​​程的情况,你可以使用CiclycBarier

CiclycBarrierReadWriteLock

希望这有帮助

我宁愿选择选项1.但是你不应该将数据输入流传递给其他对象。 相反,我建议一个对象负责从数据输入流中提取数据。 然后可以将提取的数据传递给另一个负责处理它的对象。 要处理数据,您应该查看策略模式。

另外我认为你对线程的使用是通过让每个线程负责一件事来强制过多的耦合。 你不应该担心这一点。 相反,你应该有一个执行者 对于每个接受的套接字,您将创建一个传递给执行程序的任务。 任务本身是通过数据输入流从套接字中提取数据,并创建另一个用于处理数据的任务。 然后再将该任务分派给执行者。 这样,您可以使应用程序更易于测试,因为您不一定依赖于多个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM