2013-07-29 1 views
4

객체가 잠금을 위해 null이 아니라는 것을 감지 할 때마다 블록을 동기화 할 수 있습니까? 일종의 최선의 노력을 동기화하려고합니다. 나는 코드이 방법을 쓸 수 있지만, 조금 자세한 보인다 :은 가능한 경우 객체를 동기화합니다.

if (lock_object != null) 
{ 
    synchronized(lock_object) { 
     doSomething(); 
    } 
} 
else 
{ 
    doSomething(); 
} 

이 구조의 더 나은 방법이 코드가 있습니까? tks!

+1

코드에 'lock_object'에 대한 비동기 액세스가 포함되어 있으므로 스레드로부터 안전하지 않습니다. –

+0

@ ErnestFriedman-Hill 내가 의미하는 바는 동기화를위한 최선의 노력이 필요하다는 것입니다. – delita

+2

'lock_object '가'if'와'synchronized' 문 사이에서'null'이되면 어떻게됩니까? – MadProgrammer

답변

0

당신이 말한대로 :

이 물체를 감지 할 때마다 블록이

나뿐만 동안 더 사용하는 거라고 생각 null가 아닌 동기화 : 그것은이다

while(lock_object != null){ 

    synchronized(lock_object) { 
     // your not null activities 
    } 

} 
// your null activities 
+0

사실 내가 의미하는 바는 "최선의 노력"이 필요하다는 것입니다. – delita

1

가능하지만 의미가 없습니다. 메서드 doSomething은 메서드가 속한 개체의 필드와 같은 일부 데이터를 읽거나 씁니다. 가장 분명하고 신뢰할 수있는 방법은 다른 스레드에서 호출 할 수있는 다른 모든 메서드뿐만 아니라 메서드 doSomething을 선언하는 것입니다. 동기화 된 블록은 최적화에만 사용되며 초보자 프로그래머는이를 사용하지 않아야합니다.

"최선의 노력"에 관해서는 프로그래밍에 대한 최선의 노력은 신뢰할 수 있고 검증 된 기능을 의미합니다. 다른 모든 "노력"은 코드를 포함하여 최선의 방법이 아닙니다.