인프런 커뮤니티 질문&답변

김찬님의 프로필 이미지
김찬

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

Redisson 을 활용하여 재고로직 작성하기

테스트 실패 후 tryLock waitTime 설정 변경 뒤 테스트 성공에 대한 질문

작성

·

540

0

waitTime을 10초로 설정했어도 leaseTime이 1이기 때문에 테스트는 성공했어야 할 것 같은데 왜 실패하나요?

그리고 waitTime을 10초에서 15초로 변경하면 왜 성공하나요?

답변 1

0

최상용님의 프로필 이미지
최상용
지식공유자

김찬님 안녕하세요.
waitTime 은 락 대기를 위해 기다리는 시간이고 leaseTime 은 락을 점유하는 시간이기 때문입니다.
1번째 락을 점유한스레드가 10:00 에 점유하였고 10:11초에 락을 해제한다고 할때 10초를 기다리면 락을 얻지 못하므로 실패하고 15초로 늘려주면 락을 얻을 수 있기때문에 성공하는 것입니다.

감사합니다.

1번째 락을 점유한 스레드가 10:00에 점유하면 10:01초에 락을 해제하는게 아닌가요?

김찬님의 프로필 이미지
김찬
질문자

jhj13062004님이 말씀하신대로, leaseTime(점유하는 시간)이 1초니까 1초만 점유한 뒤 10:01에 락을 해제하게 되는 것 아닌가요?

최상용님의 프로필 이미지
최상용
지식공유자

1번째 락을 점유한 스레드가 10:00 획득 10:01 해제
2번째 락을 점유한 스레드가 10:01 획득 10:02 해제
.....
15번째 락을 점유한 스레드가 10:14 획득 10:15 해제
를 하게 된다면 16~100 스레드는 락획득에 실패하게 됩니다.
만약 1초씩걸린다고 했을때 100초를 기다린다고 하면 모두가 락을 획득할 수 있을 것입니다.

김찬님의 프로필 이미지
김찬
질문자

이해됐습니다. 설명 감사드립니다.

김찬님의 프로필 이미지
김찬

작성한 질문수

질문하기