2012-07-24 130 views
-1

我只是想知道爲什麼這段代碼會拋出一個錯誤。錯誤是:爲什麼會給出錯誤?

「異常線程 」線程1「 java.lang.Error的」

class Salmon extends Thread 
{ 
    public static long id; 
    public void run() 
    { 
     for(int i = 0;i<4; i++){ 
      if(i==2&& id ==Thread.currentThread().getId()){ 
      //if(i==2){ 
       new Thread(new Salmon()).start(); 
       throw new Error(); 
      } 
      System.out.println(i + " "); 
      } 
    } 
    public static void main(String[] args) 
    { 
     Thread t1 = new Salmon(); 
      id = t1.getId(); 
      t1.start(); 
     } 
} 
+1

你得到的錯誤是什麼 – developer 2012-07-24 17:16:10

回答

7

因爲你告訴它。

if(i==2){ 
      new Thread(new Salmon()).start(); 
      throw new Error(); // <---- 
+0

爲什麼然後它仍然會拋出相同的錯誤if if條件現在是 if(i == 2 && id == Thread.currentThread()。getId())? Id的,因爲我檢查是不同的,但它仍然執行條件,如果案件是真的。爲什麼? – helpdesk 2012-07-24 17:18:27

+0

如果我等於2並且當前線程的id等於當前線程的id,那麼您告訴它會拋出錯誤。當我等於2時會發生這種情況。如果你不希望它拋出一個錯誤,只需將'throw new Error()'取出。 – nook 2012-07-24 17:21:13

+0

但爲什麼它仍然拋出錯誤,即使當我等於2但Thread.currentId()不是2? – helpdesk 2012-07-24 17:27:51

3

我想可能是更好的指定你的問題:「爲什麼執行不斷超越new Thread(new Salmon()).start();?你開始一個新的線程。當你調用start(),在新線程的run()方法繼續執行並行與緊鄰的返回start()方法後繼續執行。

1

id == Thread.currentThread().getId()永遠是你從你的主線程啓動的第一個線程(T1)真。

一小號一旦i在該線程達到2,if(i == 2 && id == Thread.currentThread().getId())將爲真以及與下面的代碼將被執行:立即

new Thread(new Salmon()).start(); 
throw new Error(); 

正如已經指出的那樣,new Thread(new Salmon()).start();返回(新創建的線程與T1並行運行)並且t1繼續到下一行,這會引發異常。