2012-07-24 2 views
-1

나는이 코드가 왜 오류를 던지는지 알아 보려고한다. 오류 : 스레드 1 "상위를"왜 오류가 있습니까?

"스레드에서 예외"

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

답변

7

당신이에 말 때문에.

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

if 조건이 현재 인 경우 왜 여전히 동일한 오류가 발생합니까? if i == 2 && id == Thread.currentThread(). getId())? 내가 확인한대로 이드는 다르지만 여전히 사실 인 경우 조건을 실행합니다. 왜? – helpdesk

+0

i가 2이고 현재 스레드의 id가 현재 스레드의 id와 같으면 오류가 발생한다고 알립니다. i가 2와 같을 때 어떤 일이 일어날 것인가? 오류가 발생하지 않게하려면'throw new Error()'라인을 꺼내십시오. – nook

+0

하지만 2가 같지만 Thread.currentId()가 2가 아니더라도 왜 여전히 오류가 발생합니까? – helpdesk

3

나는 당신의 질문이 더 지정할 수 있다고 생각 "왜 실행은? 당신은 start()를 호출 할 때 새 스레드가., 새로운 스레드에서 run() 방법의 실행이 병렬에 를 계속 시작하고 new Thread(new Salmon()).start();을 넘어 계속 않습니다 바로 돌려주는 start() 방법 후 계속 실행과.

1

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은 예외를 던지는 다음 줄로 계속됩니다.