2012-12-04 3 views
2

같은자바 동기화 블록 익명 클래스 코드

synchronized (this) 
{ 
    mTimeOutRunnable = new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      ..some code 
     } 
    }; 
} 

새로운 Runnable 클래스의 기준 assignement이 블록에 의해 커버되지만, 내부 런 (코드한다) (블록)도 synchronized 블록에 입력 하시겠습니까?

이것은 작업자 스레드에서 호출되므로 동기화 블록에 래핑되어 호출하는 (주) 스레드가 mTimeOutRunnable 개체에도 액세스 할 수 있도록하려는 것입니다.

+1

, 즉 한 번에 하나의 스레드 만 사용합니까? – amphibient

+0

죄송합니다. 여기 run() 메서드 안의 코드는 내 작업자 스레드에서 호출되지 않습니다. 이것은 주 스레드에서 호출 될'Looper' (Android)로 전달됩니다. 위의 전체 코드는 worker thread에 있지만 – Dori

+0

('Runnable '내의'this'는 바깥 쪽의'this'와 다를 것이므로'synchronized (this) {}'는 다른 객체를 잠글 것입니다. 그래서 의도 한대로 작동하지 않을 것입니다.) –

답변

5

아니요, RunnablemTimeOutRunnable으로 할당하는 경우에만 run() 메서드를 호출하는 대신 synchronized 블록이 적용됩니다.

+0

+1 우수함, 내가 바라던 것이 그 것이다! 감사합니다 – Dori

+0

당신을 환영합니다! – Keppil

1
mTimeOutRunnable = new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      ..some code 
     } 
    }; 

이 같은 그래서에만 참조 할당이 synchronized 블록에 의해 덮여있다

synchronized(this){ 
    obj = new SomeClass(); 
} 

왜 코드의 조각 스레드하지만 이후 필요가 동기화 할 것을 만드는 것