Um: por que você quer falar sobre captura anormal com múltiplos threads sozinha?
Primeiro veja um exemplo:
Classe pública ThreadException implementa Runnable {@Override public void run () {Throw New RunTimeException ();}: O console imprimiu uma informação anormal por um período de tempo. A instrução de execução do thread é colocada no bloco de try-capath, não há ajuda.Uma anormalidade de tempo de execução foi jogada manualmente em corrida. O resultado em execução é como mostrado abaixo:
Verificou -se que as anormalidades foram jogadas no console e as declarações no bloco de captura não foram impressas.
Conclusão: A operação multi -thread não pode lidar com anormalidades no processo de execução de anormalidades em ordem. Escapes anormais, a tarefa está fora da tarefa.
Então, devemos pensar em como capturar anormalidades em multi -threads?
2. Capture anormalidades em multi -thread
Vamos seguir as etapas abaixo para concluir o experimento:
1. Defina o processador de exceção
Requer implementar o método da UNVAughtexception do thread.uncaultExceptionHandler, como segue: da seguinte forma:
/ * * 1ª etapa: defina o "processador anormal" que cumpra a especificação anormal do processador anormal * real.uncaughtexceptionHandler Especificações * / classe myuncaugeptionHandler implementa manipulador { / * * thread.uncaughtexceptionHandler.uncaughtException () será a captura da captura da captura é chamado quando está quase morto*/ @Override public void UNJUGHTEXCECCO (Thread t, Throwable e) {System.out.println ("pego"+e);}}}2. Defina a fábrica de threads usando este processador anormal
/** Etapa 2: Defina a fábrica do thread* Fábrica de thread para anexar a tarefa ao thread e vincular um thread a um processador anormal*/classe hanlderthreadfactory implementos ThreadFactory {@Override public ThreadRead (Run Nable r) {System. println (thret+thread "); = "+T.getuncaughtexceptionler ()); retorna t;}}3. Defina uma tarefa para deixá -la lançar uma exceção
/ * * Etapa 3: nossa tarefa pode lançar uma exceção. ;
4. Ligue para o experimento
/** Etapa 4: use uma fábrica de threads para criar um pool de threads e chame seu método de execução*/public class ThreadExceptionCaughtexceptionHandler {public static void main (string [] args) {executSer vice -exec = executores.newcachedThreadpool (new HanldrtyreadFactory () );O resultado em execução é como mostrado abaixo:
3. Conclusão
Para capturar as anormalidades geradas por threads multi -thread em Java, você precisa personalizar um processador anormal e configurá -lo como a fábrica de threads correspondente (ou seja, etapa primeiro e segunda etapas).
Quarto, expanda
Se você souber que o mesmo processador anormal será usado em todos os lugares do código, a maneira mais simples é definir um domínio estático na classe Thread e definir esse processador para o processador insatisfatório padrão.
Esse processador é chamado apenas sem o processador insatisfatório adequado sem threads.
Public static void main (string [] args) {thread.setDefaultuNCaughtexceptionHandler (new MyuncaugexceptionHandler ());O acima é todo o conteúdo da captura anormal do multi -thread de thread multi -thread multi -thread de java.