Java 调用Socket.close()时,socketRead0()中阻塞的线程是否会抛出SocketException?
正如《Java并发性实践》中所说的那样: 不幸的是,InputStream和 OutputStream不响应中断,而是关闭 底层套接字使任何线程在读或写操作中被阻塞 写并抛出SocketException 所以,我的问题是,假设一个Java 调用Socket.close()时,socketRead0()中阻塞的线程是否会抛出SocketException?,java,sockets,Java,Sockets,正如《Java并发性实践》中所说的那样: 不幸的是,InputStream和 OutputStream不响应中断,而是关闭 底层套接字使任何线程在读或写操作中被阻塞 写并抛出SocketException 所以,我的问题是,假设一个线程在SocketInputStream.read()方法中的本机方法socketRead0()中被阻塞,如果相关套接字被关闭(通过调用close()),被阻塞的线程会立即收到SocketException 或者在达到套接字读取超时之前不会发生任何事情 假设一个线程在
线程在SocketInputStream.read()
方法中的本机方法socketRead0()
中被阻塞,如果相关套接字被关闭(通过调用close()
),被阻塞的线程会立即收到SocketException
或者在达到套接字读取超时之前不会发生任何事情
假设一个线程在SocketInputStream.read()
方法中的本机方法socketRead0()
中被阻止,如果相关的Socket
被关闭(通过调用close()
),被阻止的线程会立即收到SocketException
对
或者在达到套接字读取超时之前不会发生任何事情
这是立即的。等待超时是没有意义的。所以请告诉我这一点是否正确:当套接字关闭时,socketRead0()将立即返回-1(而不是抛出IOException),随后的代码将检查并发现套接字已关闭,因此抛出SocketException。你错了。所有这些案例都会抛出一个SocketException:socketclosed
,正如我在上面确认的,正如你的书所说的,正如你自己所说的。不,戈查,谢谢你的回答!