Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用Socket.close()时,socketRead0()中阻塞的线程是否会抛出SocketException?_Java_Sockets - Fatal编程技术网

Java 调用Socket.close()时,socketRead0()中阻塞的线程是否会抛出SocketException?

Java 调用Socket.close()时,socketRead0()中阻塞的线程是否会抛出SocketException?,java,sockets,Java,Sockets,正如《Java并发性实践》中所说的那样: 不幸的是,InputStream和 OutputStream不响应中断,而是关闭 底层套接字使任何线程在读或写操作中被阻塞 写并抛出SocketException 所以,我的问题是,假设一个线程在SocketInputStream.read()方法中的本机方法socketRead0()中被阻塞,如果相关套接字被关闭(通过调用close()),被阻塞的线程会立即收到SocketException 或者在达到套接字读取超时之前不会发生任何事情 假设一个线程在

正如《Java并发性实践》中所说的那样:

不幸的是,InputStream和 OutputStream不响应中断,而是关闭 底层套接字使任何线程在读或写操作中被阻塞 写并抛出SocketException

所以,我的问题是,假设一个
线程在
SocketInputStream.read()
方法中的本机方法
socketRead0()
中被阻塞,如果相关套接字被关闭(通过调用
close()
),被阻塞的线程会立即收到
SocketException

或者在达到套接字读取超时之前不会发生任何事情

假设一个线程在
SocketInputStream.read()
方法中的本机方法
socketRead0()
中被阻止,如果相关的
Socket
被关闭(通过调用
close()
),被阻止的线程会立即收到
SocketException

或者在达到套接字读取超时之前不会发生任何事情


这是立即的。等待超时是没有意义的。

所以请告诉我这一点是否正确:当套接字关闭时,socketRead0()将立即返回-1(而不是抛出IOException),随后的代码将检查并发现套接字已关闭,因此抛出SocketException。你错了。所有这些案例都会抛出一个
SocketException:socketclosed
,正如我在上面确认的,正如你的书所说的,正如你自己所说的。不,戈查,谢谢你的回答!