【发布时间】:2015-05-13 22:01:09
【问题描述】:
我有 'n' 个服务器线程,每个线程都监听 1 个客户端。
当服务器线程从其客户端接收到消息时,它需要通知其他“n-1”个客户端,这就是为什么我保留一个共享对象(包含一个“n”个套接字数组,每个套接字一个客户端)在服务器线程之间。
此外,在拥有ServerSocket 的主服务器线程中,每次我接受与客户端的新连接时,我都会打开一个BufferedWriter/Reader 以使用从ServerSocket.accept() 返回的新套接字给他第一个答案。
如果回答“OK”,我会打开一个新线程,将新套接字传递给它,以便监听新客户端的以下请求。
问题是我无法关闭主服务器线程中的BufferedReader 和BufferedWriter,因为它也会关闭底层流,从而导致正在侦听该套接字/流的服务器线程出现问题。
还有问题:如果我在新线程中打开另一个BufferedReader(绑定到同一个套接字),然后关闭它,其他BufferedReaders(Writers)(特别是在主服务器线程中打开的那些,我不能't close before ) 在同一个套接字上打开被关闭?他们会抛出异常吗?
可以共享打开的BufferedReader / Writer 而不是套接字,以避免每次都实例化一个新对象,但这是一个与如果我按照上述方式做事会发生什么有关的问题。
如果我不清楚,请告诉我,我的英语不是很好。
【问题讨论】:
-
我会建议在 main 线程和其他线程中不共享任何内容。每个线程都应该在自己的范围内维护其数据,您将不会遇到任何混乱的问题。
-
您不能在同一个流上可靠地拥有多个
BufferedReader/BufferedWriter。不管他们是否在同一个线程上。
标签: java multithreading sockets