java输入流冻结

java输入流冻结,java,multithreading,sockets,inputstream,Java,Multithreading,Sockets,Inputstream,我试图运行一个线程,该线程连接到套接字,获取输入流并读取它。我正在创建数百个这样的线程,并且已经设置了读取的超时,但是线程仍然停留在read()行 调用skt.available(),然后多次调用read,或者使用skt.read(byte[])。Other wiseskt.read()将阻塞。您设置的超时是连接到套接字,而不是读取超时 调用skt.available(),然后多次调用read,或者使用skt.read(byte[])。Other wiseskt.read()将阻塞。您设置的超时

我试图运行一个线程,该线程连接到套接字,获取输入流并读取它。我正在创建数百个这样的线程,并且已经设置了读取的超时,但是线程仍然停留在read()行


调用
skt.available()
,然后多次调用read,或者使用
skt.read(byte[])
。Other wise
skt.read()
将阻塞。您设置的超时是连接到套接字,而不是读取超时

调用
skt.available()
,然后多次调用read,或者使用
skt.read(byte[])
。Other wise
skt.read()
将阻塞。您设置的超时是连接到套接字,而不是读取超时

奇怪的代码。您创建一个缓冲区,将一个字节读入其中,然后解析该字节,然后重复整个过程。一个字节肯定不需要太多解析。您从未从读取中检查-1,因此当对等机断开连接时,此循环将无休止地旋转。最后,Socket.isConnected()不是一个有用的测试,特别是它没有检测到对等断开连接。

奇怪的代码。您创建一个缓冲区,将一个字节读入其中,然后解析该字节,然后重复整个过程。一个字节肯定不需要太多解析。您从未从读取中检查-1,因此当对等机断开连接时,此循环将无休止地旋转。最后,Socket.isConnected()不是一个有用的测试,特别是它没有检测到对等断开连接。

这里没有足够的信息来猜测问题是什么。这里没有足够的信息来猜测问题是什么。他设置的超时是读取超时,不是连接超时。他正在设置的超时是读取超时,而不是连接超时。while被假定为if,只是尝试拾取一个字节while被假定为if,只是尝试拾取一个字节
public void readPack() {

socket.setSoTimeout(4*1000);

if (socket.isConnected()) {


     buffer parse = new buffer();
     parse.addByte((byte) skt.getInputStream().read());
     parseIncoming(parse);
}


} catch (Exception e) {}

}