Вы не можете установить timeout
, согласно вашему требованию, на HttpURLConnection
.
Однако вы могли бы смягчить ситуацию, используя отдельный Thread
.
Получить ExecutoreService
final ExecutorService executor = Executors.newSingleThreadExecutor();
Отправьте задачу Callable<T>
, где T
- это тип данных, который вы вернете после чтения из потока данных HttpURLConnection
.
final Future<T> result = executor.submit(new HttpTask());
Вы получитеFuture<T>
, представляющий результат вашей задачи.
Теперь используйте метод Future#get(long timeout, TimeUnit unit)
.
try {
final T value = result.get(10, TimeUnit.SECONDS);
} catch (final TimeoutException e) {
result.cancel(true);
}
В этом случае, если пройдет более 10 секунд, будет TimeoutException
быть брошенным, и вы сможете внезапно завершить свою задачу.