Pergunta

Eu gostaria de matar fios que estão presos em estado de impasse. Primeiro, podemos detectar ids de rosca em estado de impasse usando o método findDeadlockedThreads() da classe ThreadMXBean em java.lang.management.

Então, eu gostaria de matar os tópicos de ids de rosca, e, portanto, eu tenho duas perguntas relacionadas:
(1) Como obter o controle de uma linha por identificador do tópico?
(2) Como matar um thread bloqueado? Eu acho que invokting método de interrupção () dará uma exceção para o segmento e vai matar o segmento.

Foi útil?

Solução

A partir do ThreadGroup raiz, você pode ter a classe Thread enumerar todos os threads em execução . Em seguida, você pode chamar Thread.stop por um que corresponda ao seu ID.

Dito isto, este é altamente perigoso devido ao potencial de objetos licença em um estado inconsistente. Eu não acredito que o método de interrupção irá causar um segmento a ser liberado que está preso na espera em um bloqueio de sincronização, de modo que o (mal) métodos de parada

Veja também: " Java Tópico Deprecation Primitive ".

Outras dicas

O java.util.concurrent.Lock.lockInterruptibly () método é susceptível de interrupção, o bloqueio sincronizado muito mais comum não é. Como mencionado na documentação, a capacidade de enumerar tópicos deadlocked pretende ser uma ajuda de depuração e não como um meio para recuperar em um ambiente de produção.

Na produção é provavelmente mais seguro para sair todo o processo e reinicie.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top