728x90

간단하게 말하면 중단이 불가능한 연산을 의미한다. 문제는 이를 얼마나 이해하는 것인데 자신이 작성한 코드가 원자적 연산이 아닐 수도 있다는 사실을 알아야 한다. 


01: public class Example {
02:      int lastId;
03:      public void resetId() {
04:           lastId=0;
05:      }
06:      public int getNextId() {
07:           ++lastId;
08:      }

4번째 줄은 단순히 0을 lastId에 할당하므로 원자적 연산이다. 그러나 lastId 타입을 long으로 바꾸면 원자적 연산이 아닐 수 있다. 64비트 명령을 지원하기 위해서 JVM은 long을 32비트 명령어 두개로 처리한다. 7번째 줄 역시 원자적 연산이 아니다. ISA를 다 이해할 필요는 없지만 위의 내용 정도는 알아 두는 것이 정신 건강에 좋다.


728x90

+ Recent posts