AQS 구성 요소 학습

3685 단어 aqs구성 요소
우선 AQS 의 기본 실행 과정 은 자 물 쇠 를 가 져 오 려 고 시도 하 는 것 이 고 성공 하면 되 돌아 오 며 실패 하면 동기 화 대기 열 에 들 어가 자 물 쇠 를 잠 그 고 기다 리 는 것 입 니 다.이 절 차 를 바탕 으로 대열 과 대열 의 노드 가 두 가지 중점 이 어야 한 다 는 것 을 알 수 있다.
먼저 AQS 에서 대기 열 노드 노드 노드 의 구 조 를 살 펴 보 겠 습 니 다.

이 클래스 에는 다섯 개의 필드 가 있 습 니 다.순서대로 보 세 요.
1.prev,next:선행 노드 와 후계 노드 를 가리 키 며 AQS 의 동기 화 대기 열 은 양 방향 링크 임 을 알 수 있 습 니 다.
2.thread:현재 스 레 드 대상.
3.wait Status:현재 노드 의 상 태 는 int 형식 변수 이 고 다음 과 같은 몇 가지 가 있 습 니 다.
값.
유형
설명 하 다.
-1
SIGNAL
현재 노드 의 후계 노드 가 막 혔 기 때문에 현재 노드 가 방출 되 거나 취 소 될 때 후계 노드 를 깨 워 야 합 니 다.
1
CANCELLED
현재 노드 는 시간 이 초과 되 거나 중단 되 어 취소 되 었 기 때문에 노드 가 이 상태 에 들 어간 후에 변 하지 않 습 니 다.
주:이것 은 유일 하 게 0 이상 의 값 입 니 다.많은 판단 논리 가 이 특징 을 사용 합 니 다.
-2
CONDITION
현재 노드 는 조건 대기 열 에 있 습 니 다.조건 이 달성 되 기 전에 자 물 쇠 를 가 져 올 수 없습니다.
-3
PROPAGATE
현재 노드 에서 잠 금 정 보 를 얻 으 려 면 후계 노드 에 전달 하고 잠 금 모드 를 공유 하여 이 값 을 사용 해 야 합 니 다.
0
없다
노드 초기 상태.
nextWaiter:현재 노드 가 공유 모드 라면 이 값 은 SHARE 노드 를 가리 킵 니 다.현재 노드 가 조건 대기 열 에 있다 면 이 값 은 다음 대기 조건 의 노드 를 가리 킬 것 입 니 다.
노드 노드 의 데이터 구 조 를 알 게 된 후에 독점 잠 금 모드 에서 의 동기 화 대기 열의 구 조 를 보십시오.

주:헤드 노드 는 new 에서 새로운 노드 노드 가 나 왔 고 tail 은 대기 열의 마지막 노드 를 직접 가리 키 고 있 습 니 다.
독점 잠 금 모드 대기 열 을 알 게 된 후 공유 잠 금 모드 에서 동기 화 대기 열 을 보십시오.

주:공유 자물쇠 와 독점 자 물 쇠 는 같은 동기 화 대기 열 입 니 다.즉,동기 화 대기 열 에 있 는 노드 는 공유 유형 일 수도 있 고 독점 유형 일 수도 있 습 니 다.
독점 자물쇠 와 공유 자물쇠 가 사용 하 는 동기 화 대기 열 을 제외 하고 중요 한 대기 열 은 조건 대기 열 입 니 다.함께 보 세 요:

조건 부 대기 열과 동기 화 대기 열의 차 이 를 구분 하 십시오:1,머리 꼬리 지침,2,단일 체인 테이블
AQS 에서 이러한 기본 적 인 데이터 구 조 를 파악 한 후에 마지막 으로 AQS 가 대외 적 으로 제공 하 는 API 를 살 펴 보 겠 습 니 다.
독점 잠 금 모드:
방법
설명 하 다.
acquire
독점 모드 에서 자 물 쇠 를 가 져 옵 니 다.인 터 럽 트 에 응답 하지 않 습 니 다.인 터 럽 트 가 발생 하면 현재 스 레 드 의 인 터 럽 트 상 태 를 true 로 설정 합 니 다.
acquireInterruptibly
독점 모드 에서 자 물 쇠 를 가 져 옵 니 다.자 물 쇠 를 가 져 오 는 과정 에서 스 레 드 가 중단 되면 중단 이상 을 던 집 니 다.
release
잠 금 자원 방출
공유 잠 금 모드:
방법
설명 하 다.
acquireShared
공유 모드 에서 자 물 쇠 를 가 져 옵 니 다.인 터 럽 트 에 응답 하지 않 습 니 다.인 터 럽 트 가 발생 하면 현재 스 레 드 의 인 터 럽 트 상 태 를 true 로 설정 합 니 다.
acquireSharedInterruptibly
공유 모드 에서 자 물 쇠 를 가 져 옵 니 다.자 물 쇠 를 가 져 오 는 과정 에서 스 레 드 가 중단 되면 중단 이상 을 던 집 니 다.
releaseShared
잠 금 자원 방출
조건 부 대기 열:
방법
설명 하 다.
await
차단 대기 조건,중단 되면 중단 이상 던 지기
awaitUninterruptibly
대기 조건 을 막 고 인 터 럽 트 에 응답 하지 않 습 니 다.인 터 럽 트 가 발생 하면 스 레 드 인 터 럽 트 상 태 를 true 로 설정 합 니 다.
awaitNanos
나 초 대기,중단 되면 중단 이상 던 지기
awaitUntil
마감 시간 까지 기다 리 고 중단 되면 중단 이상 을 던 집 니 다.
await(long time, TimeUnit unit)
지정 한 시간 을 기다 리 고 중단 되면 중단 이상 을 던 집 니 다.
signal
대기 열의 첫 번 째 노드 깨 우기
signalAll
대기 열 에 있 는 모든 노드 깨 우기
확장 API:
방법
설명 하 다.
tryAcquire
독점 자 물 쇠 를 가 져 오 려 고 시도 합 니 다.막 히 지 않 습 니 다.
tryAcquireNanos
지정 한 나 초 동안 독점 자 물 쇠 를 가 져 오 려 고 시도 합 니 다.중단 되면 중단 이상 을 던 집 니 다.
tryRelease
독점 자 물 쇠 를 풀 고 막 지 않 으 려 고 시도 합 니 다.
tryAcquireShared
공유 자 물 쇠 를 가 져 오 려 고 시도 합 니 다.막 히 지 않 습 니 다.
tryAcquireSharedNanos
지정 한 나 초 동안 공유 자 물 쇠 를 가 져 오 려 고 시도 합 니 다.중단 되면 중단 이상 을 던 집 니 다.
tryReleaseShared
공유 자 물 쇠 를 풀 려 고 시도 합 니 다.막 히 지 않 습 니 다.
위 에서 소개 한 AQS 에 관 한 기초 데이터 구조 와 API 를 알 게 된 후에 독점 자 물 쇠 를 배우 고 자 물 쇠 를 공유 하면 조건 부 대기 열 실현 원 리 는 오리무중 이 되 지 않 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기