2016-11-11 7 views
0

警告付きのJavaスレッドが終了しました。なぜスレッドが終了するのかわかりません。私はjstackでそれを見つけることができません。そして、ログコードが実行されていないようです。私のコードは以下の通りです:Javaスレッドが警告なしで終了する

jstackログに「作業スレッド終了割り込みステータス」と「作業スレッド」に関するログはありません。なにか提案を?

+0

「中断されました」ということは確実に起こりますか?あなたのメインスレッドは実際に終了するのですか?それともハングアップするのですか?アプリケーションを強制終了しましたか? –

+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の外でinterrupt()の呼び出しを何とかOPの質問に対する答えに移してください。問題は、スレッドが何とか中断されていることを示します。 OPは内部からそれを中断したいとは考えていません。 – tucuxi

関連する問題