所以基本上我有一个主线程,将接受一个套接字,并创建一个DataInputStream对象来接收数据,然后通过这个输入对象到不同的子线程,他们将用它来管理对多线程DataInputStream所接收数据并执行不同的任务。但这是行不通的,因为这两个线程都使用相同的对象来收听,所以当用户发送一些我不知道谁会阅读的内容时。 我的想法到目前为止:JAVA:使用同一个插座
1-创建某种组织者接收传入的请求并将它们重定向到相应的线程(我不太确定如何执行)。
2-当一个线程正在等待一系列传入请求(基于时间)时,它必须睡眠另一个线程,以便它可以接管输入流(我不知道它是否可以完成)。
任何其他的想法或如何实施任何一个?谢谢!
(在最坏的情况下,我会在一个加入两个线程。)
我已经决定去与ReentrantLoc,但事情是,一个线程会调用客户端如果某些条件为真为客户端发送数据(可以说T1),而其他线程被认为是监听客户请求(t2)。在这种情况下,t1将检查是否未获取锁,然后尝试从套接字读取,其中t2将稍后运行,获取锁并开始通信,但是t1恢复时,它已经在监听,应该停止。 – Khaled 2013-03-21 10:03:50
你的意思是停止监听和发送数据的全部过程,或者只是其中的一个?对于permanet还是仅仅几次? 您是否使用'ExecutorService'设计了这个线程管理? 如果没有,我建议你使用它,并停止所有的过程,你可以调用'shutDown()'和'awaitTermination()'方法。 您应该阅读它们的[API](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html) – 2013-03-22 07:50:18
问题是,当一个线程开始监听时,它不会停止,因此保持锁定并阻止其他线程。 我解决了通过使用套接字超时为听众,这是不美丽,但工作正常..谢谢 – Khaled 2013-03-24 09:05:44