Melhor prática para matar um JavaME 1,2 segmento?

votos
2

Pergunta: Estou interessado em saber a melhor prática para matar uma operação de longa data que está sendo executado como uma discussão de fundo (vamos chamá esta discussão WorkerThread) em Java 1.2.

Cenário

Especificamente, eu estou desenvolvendo um aplicativo para dispositivos Blackberry pelo qual eu fazer uma conexão HTTP. Grande figura: um pedido de URL se encaminhado para uma discussão de fundo ( WorkerThread), o fio faz a solicitação e retorna o resultado usando uma chamada de volta.

Detalhes do cenário

Agora existe uma situação onde no momento da conexão, existe uma conexão de dados , mas, em seguida, por qualquer motivo (unidades através de um túnel) essa conexão não existe mais. Devido a uma limitação no projeto de arquitetura do Blackberry, essa conexão real vai pendurar como o tempo limite é fixada para ser 2 minutos. Como resultado, há uma necessidade crucial para matar uma conexão que foi pendurado por um período relativamente (15 segundos) longo período de tempo.

Minha solução atual - 2 theads?

Agora minha solução atual é para ser executado WorkerThreaddentro de outro thread (vamos chamá este novo segmento MonitorThead). MonitorThreadcomeça WorkerThread, dorme por 1000ms e depois verifica regularmente seWorkerThread ainda está vivo. Se depois de 15 segundos WorkerThread ainda está vivo, MonitorThread coloca WorkerThread para dormir e sai. Esta é realmente a melhor abordagem possível?

Resumo de Perguntas e Pontos-chave

Em resumo, a seguir é a questão central e restrições chave associada com a pergunta. Felicidades!

Como bem sucedido matar uma discussão de fundo java que está preso em uma operação específica?

Restrições cenário:

  • Sem controle de ter pausa operação e verificar o estado tópicos solicitado
  • Específico para implementação de Java do Blackberry ME 1.2 e sua API Tópico por isso não explícita kill () método
  • Mais preocupados com a melhor prática e como matar mais com segurança um fio de retenção.

Acompanhamento / Editar
Neil Coffey recomendou que eu simplesmente manter uma referência para o objeto de conexão e, em vez chamar close () nesse objeto. Atualmente, estou olhando para isso ...

Publicado 08/05/2009 em 03:07
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Como matar um thread é uma pergunta difícil. Não há nenhuma maneira garantida de ser capaz de parar ou interromper um Thread. No entanto, se você tomar sua arquitetura atual e sobre tempo limite, basta fechar o fluxo (não a conexão ), que deve causar uma exceção I / O para ocorrer no thread que está preso em I / O. Se ele não causa um IOException, então ele deve pelo menos fazer com que a leitura ou escrita para retornar com EOF.

Note-se que fechar a conexão não ajudar, como o JavaDoc diz:

Quaisquer correntes abertas fará com que a conexão seja mantida aberta até que eles próprios estão fechados.

Você tem que fechar o fluxo que foi derivado do Connection.

Respondeu 08/05/2009 em 03:20
fonte usuário

votos
1

Bem, a melhor prática, normalmente, seria para obter a conexão para fechar, e em seguida, deixar as consequências dessa ondulação até o fio, permitindo que ele saia limpa.

Como você está fazendo a conexão? Ao invés de esperar para que o tempo fora, quais são suas chances de forçando-o a fechar? você pode se apossar de algum objeto de conexão? O Blackberry tem algum outro comando que pode ser executado para matar uma determinada conexão?

Respondeu 08/05/2009 em 03:20
fonte usuário

votos
0

Eu sempre acreditei que passar uma bandeira na discussão de fundo em uma transação atômica tem sido a melhor maneira de pedir um fio de parar. Se ele não parar por um tempo, matá-lo.

Bem, para adicionar a isso, se você acredita que 2 minutos é muito tempo, bom para você. Eu ia deixar o usuário decidir o que é um longo tempo com um botão de cancelamento.

Respondeu 08/05/2009 em 15:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more