为什么会给出错误?

问题描述:

我只是想知道为什么这段代码会抛出一个错误。错误是:为什么会给出错误?

“异常线程 ”线程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

因为你告诉它。

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

我想可能是更好的指定你的问题:“为什么执行不断超越new Thread(new Salmon()).start();?你开始一个新的线程。当你调用start(),在新线程的run()方法继续执行并行与紧邻的返回start()方法后继续执行。

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继续到下一行,这会引发异常。