-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();
      }
}
4

3 回答 3

7

因为你告诉它。

 if(i==2){
          new Thread(new Salmon()).start();
          throw new Error(); // <----
于 2012-07-24T17:17:00.947 回答
3

我认为您的问题可能会更好地说明“为什么执行会继续超出new Thread(new Salmon()).start();?您正在启动一个新线程。当您调用时start(),新线程中的run()方法的执行与立即返回方法之后的继续执行并行继续。start()

于 2012-07-24T17:20:00.127 回答
1

id == Thread.currentThread().getId()从主线程开始的第一个线程 (t1) 总是如此。

一旦i在该线程中达到 2,if(i == 2 && id == Thread.currentThread().getId())也将是 true,并且将执行以下代码:

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

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

于 2012-07-24T17:34:32.720 回答