○ Multi-thread상황에서 Data 동기화(Synchronized)
- 데이터를 공유하는 상황에서 한 클라이언트가 데이터 사용중인 다른 클라이언트가 이 데이터를 수정했을때 데이터의 무결성이 깨져 버린다.
○ Multi thread 상황에서 Data동기화 문제의 소지(synchronized)
- Local 변수 (X)
- Instance 변수 (O) : 동시에 변경을 시도 할때
- Static 변수 (O)
- Attribute
◎ request scope (X)
◎ session scope 이론적으로는 가능(O), 실제로는 불가능(X)
◎ application scope (O)
○ Data 동기화 처리 개념
- 사용중인 데이터에 Lock을 건다.
구문
synchronized(this){
데이터 사용
} //데이터 사용 끝(Lock 해제)
◆ synchronized 사용전
- 동시에 두 클라이언트가 접속을 시도하면 5초후 둘다 같은 숫자를 부여 받는다.
◆ synchronized 사용후
- 동시에 두 클라이언트가 접속을 시도하면 조금이라도 먼저 시도한 클라이언트가 5초 후 앞 번호를 가져간다. (다른 숫자 부여)
그리고 2번쨰 클라이언트는 총 10초의 sleep time을 갖는다.(앞 클라이언트의 작업이 끝날 동안 Lock이 걸리기 때문)