2016-11-11 3 views
0

мой выход нити java с любым предупреждением. Я понятия не имею, почему поток выходит. Я не могу найти его в jstack. И, похоже, код журнала не запускался. Мой код ниже:Выход нити Java без предупреждения

private class WorkThread extends Thread { 

    public WorkThread() { 
     super("work-thread"); 
     setDaemon(false); 
    } 

    @Override 
    public void run() { 
     logger.info("start running thread work-tracker"); 
     try { 
      while (!interrupted()) { 
       try { 
        // do something 
       } catch (Throwable e) { 
        logger.error("ignore all exception", e); 
       } 
       try { 
        TimeUnit.SECONDS.sleep(5); 
       } catch (InterruptedException e) { 
        Thread.currentThread().interrupt(); 
       }      
      } 
     } finally { 
      logger.error("work thread exit interrupted status: {}", interrupted()); 
     } 
    } 
} 

Я не могу найти журнал «работа выхода поток прервал статус» и ничего о «работе-нить» в журнале jstack. любое предложение?

+0

Вы уверены, что 'interrupted()' когда-либо случается? Действительно ли ваш основной поток заканчивается, или он зависает/вы были вынуждены убить приложение? –

+0

'e.printStackTrace' использовать его. –

+3

'System.exit();' закончит все без выполнения 'finally'. –

ответ

-1
private class WorkThread extends Thread { 

    public WorkThread() { 
     super("work-thread"); 
     setDaemon(false); 
    } 

    @Override 
    public void run() { 
     logger.error("start running thread work-tracker"); 
     try { 
      while (!interrupted()) { 
       try { 
        // do something 
       } catch (Throwable e) { 
        logger.error("ignore all exception"); 
       } 
       try { 
        TimeUnit.SECONDS.sleep(5); 
       } catch (InterruptedException e) { 

       } 
       Thread.currentThread().interrupt(); 
      } 
     } finally { 
      logger.error("work thread exit interrupted status: {}" +interrupted()); 
     } 
    } 
} 
+0

Почему вы думаете, что System.out лучше, чем регистрация исключений? – tucuxi

+0

Извините, я просто заменил его, нить никогда не будет прервана в вашем коде –

+0

Хорошо, теперь, пожалуйста, объясните, зачем копировать код OP и перемещать вызов, чтобы прерывать() за пределами try-catch, как-то ответ на вопрос OP. В вопросах указывается, что поток каким-то образом прерывается; не то, что OP хочет прервать его изнутри. – tucuxi

Смежные вопросы