【发布时间】:2012-09-11 10:23:00
【问题描述】:
我正在编写一个程序,其中一个程序创建一个线程,该线程依次从套接字读取,我的问题是当创建两个线程时,都从数据输入流中读取。一个线程正确读取,而另一个线程遇到 EOS 并返回 -1 作为读取的字节数。我已经同步了我的运行方法
【问题讨论】:
-
您应该只使用一个线程从流中读取,否则可能会导致混淆。您不需要同步读取,因为它已经是线程安全的。如果您收到
-1,则表示流已结束。 -
read方法阻塞直到正确接收到一些流,在这种情况下它到达EOS并返回-1,这反过来又停止了整个过程
-
这个问题只是有时会发生,有时会正常工作..这不是一直发生的问题。
-
一个常见的错误是假设你写()的方式就是你读()的方式。有时是这样,但 read() 可能只读取一个字节,或者它可能 read() 多个 write() 的数据。这很难在线程之间进行协调。
-
我重新启动了我的系统并且它工作了,但不知道当我重新启动程序时它是否会工作。谢谢,你能不能给我一些关于你所说的更详细的信息。 ,我的读取代码是 read(b,0,4) 其中 b 是长度为 4 的字节。
标签: java multithreading sockets datainputstream