찾다

 >  Q&A  >  본문

java - AtomicReference<V> compareAndSwap是比较对象的地址吗

PHPzPHPz2921일 전514

모든 응답(2)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:42:51

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

    과 비교합니다.

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:42:51

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

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

    으아악

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

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

    으아악

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

    결론:

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

    회신하다
    0
  • 취소회신하다