我只是想知道为什么这段代码会抛出错误。错误是:
“线程中的异常”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();
}
}
答案 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)
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继续到下一行,这会引发异常。