멀티 스레드 환경에서 발생하는 부적절한 결과를 예방하기 위한 방법
1. volatile :
해당 변수의 값을 바로 메인 메모리에서 가져올 수 있게 해주는 키워드이다.
CPU캐시로부터 값을 읽어오면- 다른 스레드에서 값을 변경했을때 두 변수의 값의 일관성이 깨지기 때문이다.
따라서 메인 메모리로부터 직접 읽기/쓰기를 가능하게 하여 데이터 값의 일관성을 보장한다.
2. synchronized :
여러 스레드가 하나의 자원을 공유할 때, 점유중인 스레드 이외에는 못 사용하도록 로킹하는 키워드.
volatile키워드를 사용한다고 하더라도, 동시에 읽기가 이루어지고 쓰기가 이루어질 경우, 결과의 일관성을 보장할 수 없다.
따라서, 로킹을 통해 스레드의 접근을 제어함으로써 동시성문제를 해결한다!!
추가)) synchronized의 사용기법 - 1) 메소드 전체에 사용하기 2) 메소드 안의 특정 구간에 대해서 사용하기 가 있다.
1)의 경우 개발자는 편하지만,,, 메소드 전체를 로킹해버리기 때문에 그만큼 성능이 저하되게 된다(다른 스레드는 그만큼 기달려야 하기 땜에. ㅜㅅㅜ)
따라서 2)를 쓰도록 노력하는 개발자가 되자!!
댓글 없음:
댓글 쓰기