java - AtomicReference<V> compareAndSwap是比较对象的地址吗
PHPz
PHPz 2017-04-18 10:40:51
0
2
504
PHPz
PHPz

学习是最好的投资!

모든 응답(2)
伊谢尔伦

은 주소입니다. 정확히 말하면 이 객체의 메모리 값 Offset 위치를
안전하지 않은 자세한 설명

과 비교합니다.
阿神

질문자가 말했듯이 AtomicInteger 소스 코드는 스레드 안전성을 달성하기 위해 Integer을 비교하고 대체합니다. 그리고 AtomicReference은 객체 참조와 비교 및 ​​대체입니다. 이는 원자 클래스 CAS 구현입니다.

주소를 비교할 것인지는 질문자가 말한 것부터 시작하여 AtomicReference 다음 방법을 알아 두십시오.

으아악

기본 구현은 Unsafe 로컬 메서드인 native 클래스에 있습니다. Unsafe의 CAS에는 읽고 쓸 메모리 위치 valueOffset, 비교할 값 expected, 쓸 새 값 update이라는 세 개의 피연산자가 포함됩니다. CAS는 메모리 위치 V에 저장된 값이 비교된 값 A와 동일한 경우에만 메모리 주소의 이전 값을 새 값으로 원자적으로 업데이트합니다. 그렇지 않으면 작업이 수행되지 않습니다.

핵심은 들어오는 valueOffset의 역할에 있습니다. 계속해서 AtomicReference 소스 코드를 확인하세요:

으아악

여기서 unsafeobjectFieldOffset 메소드는 객체의 메모리 오프셋을 구하는 것인데, 즉 여기서 비교를 통해 동일한 객체 주소인지 판단할 수 있다.

결론:

Atomic Atom CAS 연산은 메모리 오프셋, 즉 메모리 주소를 비교합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿