是否可能让一个线程在不需要对套接字进行同步的情况下,向Java Socket
的 OutputStream
写入数据,而另一个线程从套接字的 InputStream
读取数据?
是否可能让一个线程在不需要对套接字进行同步的情况下,向Java Socket
的 OutputStream
写入数据,而另一个线程从套接字的 InputStream
读取数据?
当然可以。您描述的确切情况不应该是问题(同时读取和写入)。
通常,如果没有可读取的内容,读取线程将被阻塞,并且如果设置了超时,可能会在读取操作上超时。
由于输入流和输出流是Socket内的单独对象,您唯一需要考虑的事情就是,如果有两个线程尝试同时读取或写入(两个线程,相同的输入/输出流),会发生什么情况? InputStream / OutputStream类的读/写方法不是同步的。然而,如果您正在使用InputStream / OutputStream的子类,则调用的读取/写入方法可能是同步的。您可以查看您正在调用的任何类/方法的javadoc,并快速找到答案。
accept()
方法是一个阻塞方法... 因此读/写线程不能同时获取套接字.... 然而,如果我错了,发送/接收的数据是否会在管道中混合? - Jason Krs是的,这是安全的。
如果您想从InputStream中读取多个线程,那么您需要更加小心(假设您一次读取多个字节)。