Единственный надежный способ, который я нашел, - создать экземпляр Socket
как InterruptibleChannel
и выполнить прерывание в зависшем потоке ввода-вывода.(Кстати, вам не нужно использовать асинхронные вызовы NIO с InterruptibleChannels, блокировка ввода-вывода работает нормально, у вас просто есть действительно хороший и унифицированный способ пиковых обменов)
Хотя, похоже, что URLConnection
не позволяет вам подключить пользовательскую фабрику сокетов.
Возможно, вам следует изучить HttpClient от Apache.
РЕДАКТИРОВАТЬ
Вот как вы создаете Interruptible Socket.
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, но я знаю, что вы можете настроить инициализацию сокета.