为什么会给出错误?
我只是想知道为什么这段代码会抛出一个错误。错误是:为什么会给出错误?
“异常线程 ”线程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();
}
}
因为你告诉它。
if(i==2){
new Thread(new Salmon()).start();
throw new Error(); // <----
为什么然后它仍然会抛出相同的错误if if条件现在是 if(i == 2 && id == Thread.currentThread()。getId())? Id的,因为我检查是不同的,但它仍然执行条件,如果案件是真的。为什么? – helpdesk 2012-07-24 17:18:27
如果我等于2并且当前线程的id等于当前线程的id,那么您告诉它会抛出错误。当我等于2时会发生这种情况。如果你不希望它抛出一个错误,只需将'throw new Error()'取出。 – nook 2012-07-24 17:21:13
但为什么它仍然抛出错误,即使当我等于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继续到下一行,这会引发异常。
你得到的错误是什么 – developer 2012-07-24 17:16:10