자바 모니터 메커니즘 사용 방법 분석
모니터운영 체제 에 semaphore 와 mutex,즉 신 호 량 과 상호 배척 량 이 존재 합 니 다.기본 적 인 mutex 를 사용 하여 개발 할 때 mutex 의 down 과 up 작업 을 조심해 야 합 니 다.그렇지 않 으 면 잠 금 문 제 를 일 으 키 기 쉽 습 니 다.병발 프로그램 을 더욱 잘 작성 하기 위해 mutex 와 semaphore 를 바탕 으로 더욱 높 은 차원 의 동기 화 원 어 를 제시 했다.실제로 Monitor 는 프로 그래 밍 언어의 범주 에 속 하고 C 언어 는 Monitor 를 지원 하지 않 으 며 자바 는 Monitor 체 제 를 지원 한다.
하나의 중요 한 특징 은 같은 시간 에 하나의 스 레 드/프로 세 스 만 Monitor 가 정의 하 는 임계 구역 에 들 어 갈 수 있어 Monitor 가 서로 배척 하 는 효 과 를 실현 할 수 있다 는 것 이다.Monitor 의 임계 구역 에 들 어 갈 수 없 는 프로 세 스/스 레 드 는 막 혀 야 하 며 적당 한 시기 에 깨 워 야 합 니 다.분명히 Monitor 는 동기 화 도구 로 서 라인/프로 세 스 를 관리 하 는 메커니즘 을 제공 해 야 한다.
Monitor 라 는 체 제 는 더욱 고 급 스 러 운 원 어 라 고 불 리 는 이 유 는 대외 적 으로 이러한 체 제 를 차단 하고 내부 에서 이런 체 제 를 실현 하여 Monitor 를 간결 하고 사용 하기 쉬 운 구실 로 만 들 수 밖 에 없다.
모니터 기본 요소
임계 구역
모니터 대상 과 자물쇠조건 변수 및 Monitor 대상 에 정 의 된 wait,signal 조작Monitor 를 사용 하 는 것 은 주로 서로 배척 하고 임계 구역 에 들 어 갈 수 없 는 프로 세 스 를 막 기 위해 서 입 니 다.스 레 드 는 Monitor object 가 협조 해 야 합 니 다.이 object 내부 에는 해당 하 는 데이터 구조 가 있 습 니 다.예 를 들 어 목록 은 막 힌 스 레 드 를 저장 하 는 데 사 용 됩 니 다.또한 Monitor 메커니즘 은 본질 적 으로 mutex 원 어 를 바탕 으로 하기 때문에 object 는 mutex 기반 의 자 물 쇠 를 유지 해 야 합 니 다.
또한 적당 한 시기 에 프로 세 스/스 레 드 를 막 고 깨 우기 위해 조건 변 수 를 도입 해 야 합 니 다.이 조건 변 수 는 언제 가'적당 한 때'인지 결정 하 는 데 사 용 됩 니 다.이 조건 은 프로그램 코드 의 논리 에서 나 올 수도 있 고 Monitor object 내부 에서 나 올 수도 있 습 니 다.한 마디 로 하면 프로그래머 가 조건 변수 에 대한 정의 가 매우 자주 적 입 니 다.그러나 Monitor object 내 부 는 데이터 구 조 를 사용 하여 막 힌 대기 열 을 저장 하기 때문에 외부 에 두 개의 API 를 제공 하여 스 레 드 가 막 힌 상태 에 들 어가 고 그 후에 깨 워 야 합 니 다.각각 wait 와 notify 입 니 다.
Monitor 자바 에서 의 실현
임계 구역 의 권 정
synchronized 키 워드 를 수식 하 는 방법,코드 블록,바로 Monitor 메커니즘 의 임계 구역 입 니 다.
monitor object
상기 synchronized 키 워드 를 사용 할 때 동기 화(this)와 같은 대상 을 지정 해 야 합 니 다.한 마디 로 synchronized 는 대상 을 관리 해 야 합 니 다.이 대상 은 Monitor object 입 니 다.
Monitor 메커니즘 에서 Monitor 는 테스트 문 제 를 검사 하지 않 고 mutex 와 wait,signal API 를 유지 하여 스 레 드 의 차단 과 깨 우 침 을 관리 합 니 다.
자바 대상 은 메모리 에 저장 되 어 있 으 며 각각 세 부분 으로 나 뉘 는데 그것 이 바로 대상 헤드,인 스 턴 스 데이터 와 정렬 충전 이 고 대상 헤드 에 자물쇠 표 지 를 저장 합 니 다.이 동시에 자바.lang.Object 류 는 wait(),notify(),notify All()방법 을 정 의 했 습 니 다.이런 방법의 구체 적 인 실현 은 ObjectMonitor 모델 의 실현 에 의존 합 니 다.이것 은 JVM 내부 에서 C++를 바탕 으로 하 는 체제 입 니 다.기본 원 리 는 다음 과 같 습 니 다.
하나의 스 레 드 가 Object 의 자 물 쇠 를 가 져 와 야 할 때 EntrySet 에 넣 어 기 다 립 니 다.이 스 레 드 가 자 물 쇠 를 가 져 오 면 현재 자물쇠 의 owner 가 됩 니 다.프로그램 논리 에 따 르 면 자 물 쇠 를 얻 은 스 레 드 는 외부 조건 이 부족 하여 계속 진행 할 수 없습니다(예 를 들 어 생산자 가 대기 열 이 가득 차 있 거나 소비자 가 대기 열 이 비어 있 는 것 을 발견).이 스 레 드 는 wait 방법 으로 자 물 쇠 를 풀 고 wait set 에 들 어가 서 차단 하여 기다 릴 수 있 습 니 다.다른 스 레 드 는 이 럴 때 자 물 쇠 를 얻 을 수 있 습 니 다.다른 일 을 해서 이전에 성립 되 지 않 았 던 외부 조건 을 성립 시 키 면 이전에 막 혔 던 라인 이 다시 Entry Set 에 들 어가 경쟁 자물쇠 로 들 어 갈 수 있다.이 외부 조건 은 모니터 메커니즘 에서 조건 변수 라 고 부른다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.