2012-02-16 3 views
0

clearAndSave() 메소드에서 save()가 작업 완료 후 clear()가 항상 실행되도록 다음 코드를 편집하려면 어떻게해야합니까?Java threadsafe 순차 메소드 호출

clear() 및 save() 메서드는 새 스레드를 만드는 객체를 사용합니다.

public class Test { 
    public void clearAndSave() { 
     clear(); 
     save(); 
    } 

    private void clear(){ 
     // Deletes everything from DB. 
    } 

    private void save(){ 
     // Adds new data into DB. 
    } 
} 
+0

'clear()'_before_'save()'에서 생성 된'Thread'와의 결합은 어떻게 호출됩니까? – Gray

답변

1

를 스레드를 타고 점점없이, 당신이 스레드 코드를 수정하고 몇 가지 메커니즘을 사용하지 않는 한 그 효과를 얻을 수 없습니다 첫 번째 스레드가 완료 될 때까지 두 번째 스레드를 대기시킵니다. 스레드 A의 참조를 스레드 B와 B 호출 A.join에 전달하거나 Semaphore 또는 CountDownLatch을 인스턴스화하여 스레드에 전달하거나 대기 알림을 사용하여 자체 메커니즘을 만들 수 있습니다.

그러나 이것은 코드를 더욱 복잡하게 만듭니다. 거기에 동시성이 필요 없다면 스레드를 제거하십시오.

1

새 스레드를 생성하지 않은 clear() 또는 save()는 항상 순차적으로 실행됩니다.

+0

내 질문에 뭔가를 놓쳤습니다. 지금 업데이트됩니다. –

1

지우기 및 저장이 같은 스레드에서 실행 중이므로 항상 그런 식으로 실행됩니다. 새 스레드를 만들고 새 스레드 또는 그와 비슷한 스레드에서 새 스레드를 호출하지 않습니다. 당신은 모든 사람들까지 모두 실행을 중지 만들고 싶은 경우에, 당신은 할 줄 :

synchronized(this) { 
    clear(); 
    save(); 
}