2010-02-19 2 views
1

동기화 된 블록에 들어갈 때 IllegalStateException이 발생하면 어떤 의미입니까?동기화 된 블록을 입력 할 때 IllegalStateException이 발생했습니다.

public void run() { 
     while (true) { 
      int n = 0; 
      synchronized (service) { // IllegalStateException 
       n = processPendingRequests(); 
      } 

      /* 
      * If n > 0, we processed at least one element, in which case we 
      * immediately check the queue again until it was empty. 
      */ 
      if (n == 0) { 
       sleep(); 
       continue; 
      } 
     } 
    } 

service 객체가 IllegalStateException가 발생할 수 있습니다 나는 스레드의 실행 방법 안에 때때로이를보고 있어요? 방법?

+2

스택 추적이 있습니까? 첫 번째 추측은 동기화와 관련이 없으며 다른 이유로 throw됩니다. – Yishai

+0

실제로 스레드의'run' 메서드에 있습니다. 게시물을 좀 더 명확하게 편집하겠습니다. – JesperE

+0

그렇다면 왜 디버거는'synchronized' 문에서 멈출까요? – JesperE

답변

1

Java Language Specification에 따르면 "synchronized"문은 "IllegalStateException"을 throw하지 않습니다. 따라서 언어 사양이 잘못되었거나, 부적합한 JVM을 사용하고 있거나, 프로그램의 동작을 잘못 해석 한 것 같습니다.

+0

나는 아마 뭔가 잘못 해석했을 것이다. – JesperE

관련 문제