기술 포스팅을 열심히 해보고자...
노트북도 집으로 가져왔다...
그리하여 첫번째.....
Thread Safe먼저 간단하게 해보자......
Thread Safe란 Multi-Thread 시 데이터를 동시에 접근할수 없도록 하는 기술.? 기능? 이다.
아무튼.. Thread Safe를 하는 방법은 여러가지..
Lock을 걸수도 있고 Monitor.enter, Monitor.exit를 사용해도 되고..
그중에 간단하게 Task, Await 기능을 이용하여 Thread Safe한 기술을 해보고자 한다
(비동기기능으로써 해당 작업이 종료될때까지 대기타도록 하는 기능)
(Thread Safe라는것이 비동기와 동일하다고 생각해도 될 것 같다. 결국 Lock, Monitor 기능도 해당 Object를 누군가가 사용중일때는 사용이 끝날때까지 대기하라는 것과 동일하다고 판단됨)
흔히들 만드는 예제인 은행샘플로 만들어보도록하자.
진행해보고자 하는 방법은
1000원을 가지고 있는 사람이 100번을 입/출금을 하면서 Thread Safe하게 처리가 되는지 확인 해 볼 것이다.
코드는 아래와 같다.
아까 말한것과 같이 한개의 계좌에는 1000원이 들어가 있고.. 100번의 행동을 진행한다.
1번의 행동에는 각각
0원 입금, 2원 입금, 3원 출금, 6원 입금, 2원 출금, 1원 출금, 8원 입금, 5원 출금, 11원 입금, 6원 출금
최종적으로는 10원 입금!
해당 상황에서 Thread Safe하지 않다면 어떠한 값이 나올지 모른다.
하지만 Trhead Safe한 상황이라면... 아래와 같이
2000원이 계좌에 존재할 것이다 ( 1000 + (10 * 100) 이므로)
전체 코드는 아래에!