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

时间:2013-03-21 07:31:55

标签: java multithreading sockets inputstream

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

1-创建某种组织者来接收传入的请求并将其重定向到负责的线程(我不确定该怎么做)。

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

还有其他任何想法或如何实施这些想法?谢谢!

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

2 个答案:

答案 0 :(得分:2)

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

CiclycBarrierReadWriteLock

希望这个帮助

答案 1 :(得分:2)

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

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