2016-02-29 59 views
0

在Android中,但可以在任何Java程序中,我產生了一個引發RunTimeException的子線程。代碼如下所示:在導致主父線程結束的子線程上拋出runTime異常,爲什麼?

new Thread(new Runnable() { 
     @Override 
     public void run() { 

      throw new RuntimeException(); 
     } 
    }).start(); 

這完全終止我的應用程序與FatalException錯誤。我認爲只有子線程會結束,但主/父線程可以繼續?這個假設不正確嗎?

+1

在正常的java它不會終止 –

回答

0

的RuntimeException通常只會殺死線程,但可以殺死程序。其他因素通常是決定因素。需要查看更多代碼,但這可能是線程中的android異常處理問題。

+0

@ j2emanue它在你的主要Java文件中嗎?重新創建你的問題。 –

0

只有主(單個)線程的Android。

0

很確定你可以創建你自己的異常,並在子線程上執行stopSelf()。不確定你想要做什麼,或者我會舉一個例子。

Runnable r = new Runnable() 
{ 
    public void run() { 
    while (/*whatever you want to determine end of thread*/) 
    { 
     try { // this stuff 
     } catch (Exception e) { // exception handling 
     } 
    } 
    stopSelf(); 
    } 
}; 

//Thread start code 

這應該工作,而不是崩潰您的應用程序...

+0

其實我只是問基本的行爲。應該拋出一個子線程的運行時異常結束父線程嗎?在我的測試在Android上它這樣做,但有人在Java上提到它不是所以我不知道什麼是預期的行爲。什麼是規則? – j2emanue

+0

RuntimeException通常只會殺死線程,但即使在java中也可能會終止程序。其他因素通常是決定因素。需要查看更多代碼,但這可能是線程中android異常處理的一個問題。 –

+0

我明白了,您可以將此作爲考慮的正式答案。 – j2emanue

相關問題