Multi Thread 환경에서 공유 Resource에 대한 Thread 경합과 Synchronizationㅇ에 대해 알아본다.
WAS(Web Application Server)에서는 많은 수의 동시 사용자들을 처리하기 위해 적게는 수십개에서 많게는 수백개의 Thread
를 사용한다.
두 개 이상의 Thread
가 같은 자원을 이용하게 되는 경우에는 필연적으로 스레드간 경합이 발생하게 되고 경우에 따라 Dead Lock
이 발생할 수 있다.
로그를 남기는 작업도 로그를 기록하려는 Thread가 Lock을 획득하여 공유 자원에 접근하게 된다.
Thread경합의 특별한 경우
여러개의 Thread에서 작업을 완료하기 위해서는 상대방의 Thread가 끝나야 하는 상황을 말한다.
Thread 경합 때문에 다양한 문제가 발생할 수 있으며, 이런 문제를 분석하기 위해서는 Thread dump를 이용하기도 한다.
여러 스레드가 공유 자원을 사용할 때 데이터의 정합성을 보장하려면 한번에 하나의 스레드만 공유 자원에 접근할 수 있게 해야 한다.
Java에서는 Monitor 를 이용해 스레드를 동기화 한다.
객체들은 하나의 Monitor를 각각 가지고 있다.