멀티스레드프로그래밍3 : 멀티스레드의 문제점과 해결

데이터 공유와 동기화 문제

  • 멀티 스레드의 장점 중 하나는 공유 데이터를 여러 스레드에서 사용할 수 있다는 점이지만 공유데이터에 여러 스레드가 동시 접근하여 수정하면 문제가 발생한다. => 이를 데이터 신뢰성이 깨졌다고 표현한다.
    • 예를 들어 공유데이터 계좌가 있다고 생각해보자.
    • 잔액이 5000원 남았는데 a스레드에서 3000원을 b스레드에서 4000원을 동시에 출금하려고한다면 순서가 없으므로 3000원과 4000원이 동시에 출력되어 이 계좌는 마이너스통장도 아닌데 -2000원이 되어버리는 문제가 발생한다.
    • 데이터 신뢰성이 깨져버렸다
  • 해결하기 위해서는 세마포어(Semaphore)개념으로 lock개념과 synchronized키워드 사용
    • synchronized는 메서드 등 블록에 사용하며 해당 영역

https://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html