자바 원자 조작

-- Start
java. util. concurrent. atomic 패키지 에서 다음 과 같은 원자 류 를 제공 합 니 다. 이것 은 라인 이 안전 한 클래스 입 니 다. 그러나 동기 화 와 잠 금 을 통 해 이 루어 지 는 것 이 아 닙 니 다. 원자 변수의 조작 은 플랫폼 에서 제공 하 는 병렬 접근 을 위 한 하드웨어 원 어로 변 경 됩 니 다.
  • AtomicBoolean -- 원자 불
  • AtomicInteger - 원자 정형
  • AtomicIntegerArray - 원자 정형 수조
  • AtomicLong - 원자 장 정형
  • Atomic LongArray - 원자 장 정형 수조
  • AtomicReference -- 원자 인용
  • AtomicReferenceArray - 원자 인용 배열
  • AtomicMarkableReference -- 원자 표기 인용
  • AtomicStampedReference -- 원자 스탬프 인용
  • AtomicInteger FieldUpdater -- 성형 volatil e 역 을 감 싸 는 원자 조작
  • Atomic LongFieldUpdater - 장정 형 volatil e 역 을 감 싸 는 원자 조작
  • AtomicReference FieldUpdater - 대상 volatil e 역 을 감 싸 는 원자 조작
  • 이러한 종 류 를 도입 하 는 주요 원인 은 잠 금 되 지 않 고 대기 알고리즘 이 없 기 때 문 입 니 다. 예 를 들 어 비교 및 교환 (CAS) 의 원 리 는 현재 값 과 기대 치 를 비교 하 는 것 입 니 다. 같 으 면 이 변 수 는 변화 가 없 음 을 나타 냅 니 다. 예 를 들 어 다음 의 예 는 동기 화 와 CAS 방식 으로 ID 생 성 기 를 실현 합 니 다.
    동기 화 실현 방식
    class IDGenerator {
    	private int id;
    
    	public IDGenerator() {
    	}
    
    	public synchronized int nextInt() {
    		return ++id;
    	}
    }

    CAS 구현 방식
    class IDGenerator {
    	private final AtomicInteger id = new AtomicInteger(0);
    
    	public IDGenerator() {
    	}
    
    	public int nextInt() {
    		while (true) {
    			int oldID = id.get();
    			int newID = oldID + 1;
    			if (id.compareAndSet(oldID, newID))
    				return newID;
    		}
    	}
    }

    ---
    더 많은 참조:
    자바 추출
    --
    성명: 전재 출처 를 밝 혀 주 십시오.
    -- Last Updated on 2012-07-16
    -- Written by ShangBo on 2012-07-16
    -- End

    좋은 웹페이지 즐겨찾기