2017-02-20 2 views
0

에서 멀티 스레딩 :다음 코드에 따라 재귀 방법

synchronized int x(int y) { 
    int m; 

    class statement extends Thread { 

      @Override 
      void run() { 
       //Some Statements  
       if (condition) { 
        m = x(someValue); 
       }  
       //other statements 
      } 
    } 
    //some statements 

    statement st = new statement(); 
    st.start; 
    return m; 
} 

이 프로그램은 x(int y) 호출 할 때마다, 그것은 새 스레드를 생성합니다.

이제는 프로그램이 두 번째로 x()을 호출하면 외부 스레드 (첫 번째 호출의 스레드)가 객체의 잠금을 획득합니다. 그래서 두 번째 호출 (내부 스레드)의 스레드는 객체를 획득하거나 차단됩니다.

감사가 만드는 키워드

+2

이것은 정말 이상한 코드입니다. 이전에는 본 적이 없었습니다. 스레드를 사용하고 동기화 된 x의 블로킹을 사용하는 것은 말이되지 않습니다. –

+0

@TobiasOtto 더 자세히 설명해 주시겠습니까? 왜 그것이 이해가되지 않습니까? – HMD

+1

계산 _을 실행하는 _long이 있고 _main programm_을 실행하거나 _complex calculations_을 많이 갖고 있고 둘 이상의 cpu/core가 계산에 대해 병렬로 작업하기를 원한다면 새 스레드를 시작합니다. 귀하의 예제에서 메서드 x의 차단은 다른 스레드를 금지합니다. –

답변

1

하나 스레드가 어느 시점에서 x()를 호출 할 수 있는지 확인합니다.

하지만 바깥 쪽 스레드가 여전히 해당 메소드 내에 있는지 예측할 수 없습니다.

기록을 위해 : 그렇게하지 마십시오. 이와 같이 "실제"코드를 작성하지 마십시오.

+0

나는이 같은 코드를 작성하지 않을 것입니다. 방금 멀티 스레딩 프로그래밍을 시작했고 몇 가지 질문이 내 머리에 붙어 있습니다. 대답을 찾을 필요가 있습니다. – HMD

+0

또한 내부 호출이 반환 될 때까지 외부 스레드가 메서드를 이탈 할 수 없습니다. – HMD

+1

잘못되었습니다. 외부 스레드는 내부 스레드를 생성하고 시작한 다음 반환합니다. 기다릴 수있는 것은 아무것도 없습니다! – GhostCat