2011-11-11 73 views
2

我正在編寫一個將使用多個線程的應用程序。有主線程正在啓​​動另一個線程。我想說的是,當啓動的線程中的一個拋出異常時,主線程應該停止啓動線程。它看起來或多或少是這樣的:從其他線程捕獲異常?

class SomeClass { 
boolean launchNewThread = true; 
public static void main() { 
    while (launchNewThread) { 
     try { 
      AnotherClass.run(); 
     } catch (CrossThreadException e) { 
      launchNewThread = false; 
     } 
    } 
} 
} 

class AnotherClass implements Runnable { 
    public void run() { 
     if (a=0) throw new CrossThreadException(); 
} 

}

回答

4

您也可以使用監聽器作爲How to throw a checked exception from a java thread?

當一個異常被裏面的子線程之一拋出描述,你可以調用從子線程像listener.setLaunchNewThread(false)的方法,這將改變你的布爾標誌值在父線程中。

在附註中,調用AnotherClass.run()不會啓動新線程,而只是在同一線程內從AnotherClass調用run方法。改爲使用new Thread(new AnotherClass()).start()

+0

是的,我知道,上面的代碼只是一個...我會說僞代碼。更重要的是,我不希望主線程等待其他線程。它必須啓動10個「子」線程,並且如果在這些線程中沒有發生異常,就可以啓動接下來的10個線程。 – BartoszCichecki

+0

主線程不必再等待。它將繼續創建線程,除非launchNewThread的值由其中一個子線程通過偵聽器更改。 – laguille

9

你應該自己做 - 捕捉異常,並以某種方式將它傳遞到啓動線程。

此外,有Future概念,它已經這樣做。您應該啓動您的主題作爲期貨,並檢查isDone(),並從get()捕獲ExecutionException,如果將來的任務拋出異常,則會拋出此異常。

+1

+1引用未來 – bpgergo