작성자 : kyuu 👀
테스트 환경 :
<aside> 💬 동시에 1000번의 API 호출 시 동시성 오류가 발생하여 3.32 %의 리뷰 데이터가 유실되었다.
</aside>
1) synchronized VS ReentrantLock
: Java의 제일 대표적인 기법인 synchronized lock은 검색 시 synchronized block 에 진입 및 탈출 자체에 비용이 소모되기 때문에 남발하게 될 경우 성능 상에 문제가 될 수 있고 세세한 작업 또한 어려움이 있음 ( 세세한 작업 : 특정 시간을 기다리고, 그 안에 처리가 안될 경우 패스 혹은 lock을 잡는 순서를 보장 등 )
: 또한 Syncronized를 사용할 경우 나의 Thread가 상태 정보를 얻을 수 없고, Syncronized 구문을 마주했을 때 누군가 해당 객체의 Locking을 Release 하기까지 무한히 기다리는 수 밖에 없다.
⇒ java5 부터 제공되는 ReentrantLock의 경우 위의 단점을 보완하여 비교적 간편하게 구현이 가능했고