为什么会出错?

时间:2012-07-24 17:15:39

标签: java multithreading

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

  

“线程中的异常”Thread-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();
      }
}

3 个答案:

答案 0 :(得分:7)

因为你告诉它。

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

答案 1 :(得分:3)

我认为您的问题可能会更好地指定“为什么执行会继续超过new Thread(new Salmon()).start();?您正在开始一个新线程。当您致电start()时,执行run()方法新线程继续并行,并在立即返回start()方法后继续执行。

答案 2 :(得分:1)

对于从主线程开始的第一个线程(t1),

id == Thread.currentThread().getId()始终为真。

只要i在该线程中达到2,if(i == 2 && id == Thread.currentThread().getId())也将为真,并且将执行以下代码:

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

正如已经指出的那样,new Thread(new Salmon()).start();立即返回(新创建的线程与t1并行运行),t1继续到下一行,这会引发异常。