2014-07-05 3 views
1

부울, 바이트, short, char, int 및 float와 같은 기본 데이터 유형은 원자 적입니다. long과 double과 같은 64 비트 데이터 유형은 그렇지 않습니다.원시 데이터 유형은 Java에서 원자입니다.

하지만 이것은 무엇을 의미합니까? 내가 때로는 내가 경주 조건을 가지고보다 정수 변수에 증가하고 감소 2 스레드 있습니다.

예를 들어 금액을 변수에 추가하는 바이트 코드입니다.

이 경우 원자 단위로 작동하는 경우 (getfield, iadd ...) 전체가 아닌가요?

+0

의견을 보내주십시오. –

+0

원자는 값을 변경하는 연산이 트랜잭션과 같이 "즉시"발생한다는 것을 의미합니다. 그건 당신이 경쟁 조건을 갖지 않을 것이라는 뜻이 아닙니다. 단지 당신이 원자력 때문에 경쟁 조건을 갖지 못한다는 것을 의미합니다. – alfasin

+0

예 디자인에서 또는 우연히 Are java primitive ints를 읽었습니까? 하지만 내가 왜 "getfield", "iload_1"이 명시 적으로 물었는지는 확실하지 않았습니다. –

답변

4

int 변수에서 증가하고 감소하는 Threads가 2 개있는 경우가 있는데, 그 중 하나는 경쟁 조건이 있습니다.

예, 당신은 것 - int 변수의 "설정", "수"및 운영은 각 원자에도 불구하고, 그것은 "증가"작업이 원자 의미하지 않기 때문에.

이 경우 원자는 모든 단일 작업 (getfield, iadd ...)이 아닌 전체 추가입니까?

예. 실제로는 원시적 인 것이 아닙니다 은 원자 적입니다 - 원자 적이며 읽기 및 쓰기 연산입니다. 그것은 큰 차이입니다.