1

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

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

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

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

(在最坏的情况下,我必须将两个线程合二为一……)

4

2 回答 2

2

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

CiclycBarrierReadWriteLock

希望这有帮助

于 2013-03-21T07:40:08.407 回答
2

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

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

于 2013-03-21T07:54:53.127 回答