동시성저번 글은 메모리 가시성에 대한 글을 작성했다. 보통 성능을 위해 변수를 메모리에서 직접 참조하지 않고, 캐시에 담아서 값을 처리를 하는데, 이를 통해서 생기는 문제였다. 이번에 다룰 부분은 동시성이다. private Integer x = 7000if(x > 5000){ x -= 4000;} 쓰레드 안에서 이러한 로직을 실행할 때 문제가 생긴다. 만약 두개의 쓰레드가 동시에 실행한다면 어떻게 될까? 둘다 if문에 들어가서 검증로직을 수행 후 , x의 값을 변경하게 된다. 동시에 값을 참조했으므로 x의 값은 7000으로 찍히고 둘다 if문 안으로 들어가게 된다. 첫번째 쓰레드가 x에서 -4000을 해버렸고, 두번째 쓰레드가 값을 변경할때 x는 1000이 되게 되어 x는 음수가 되는 상황이 발생..