Future.get () e interruptedException threading assíncrono
-
20-08-2019 - |
Pergunta
Estou usando rosqueamento assíncrono no meu aplicativo com httpclient. Eu faço uma ligação usando a API futura como assim
mStrResults = (String) rssFuture.get();
Esta chamada tenta recuperar uma string html retornada do meu método de chamada httpclient chamável ().
O que eu quero fazer, no entanto, é garantir que o método GET não espere muito tempo enquanto executa o método Call (). Devo passar um parâmetro de tempo limite ao chamar rssfuture.get () ou é bom cercar apenas um bloco de captura interruptedException?
Além disso, existe um tempo padrão em que o encadeamento assíncrono esperará antes de jogar uma interrupção e, se sim, posso definir um valor personalizado?
Solução
Você deve passar um parâmetro de tempo limite ao ligar rssFuture.get()
e pegue a timeoutException. Uma interruptedException só acontecerá se o tópico executando o seu call
é interrompido com o Thread.interrupt
método ou se você ligar para o cancel(true)
Método no futuro obj.
Outras dicas
Você deve usar o futuro.Obtenha (tempo limite de longo prazo, unidade de unidade de tempo), e pegue timeoutException. Não há tempo limite padrão para get (), ele vai esperar para todo sempre.
InterrompedException não será jogado, a menos que o encadeamento chamado Future.get () seja interrompido.