我发现唯一可靠的方法是实例Socket
化为InterruptibleChannel
,并在卡住的 IO 线程上执行中断。(顺便说一句,你不必使用带有 InterruptibleChannels 的异步 NIO 调用,阻塞 I/O 工作正常,你只是有一个非常好的和统一的方式来踢卡住的交换)
虽然,它看起来URLConnection
不允许您连接自定义 Socket 工厂。
也许您应该从 Apache调查HttpClient 。
编辑
这是创建可中断套接字的方法。
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.channels.SocketChannel;
final SocketAddress remoteAddr =
new InetSocketAddress(
serverAddress,
servicePort
);
final SocketChannel socketChannel = SocketChannel.open( );
socketChannel.connect( remoteAddr );
// Here java.io.Socket is obtained
Socket socket = socketChannel.socket( );
我没有 HttpClient 示例,但我知道您可以自定义套接字初始化。