자바 에서 synchronized 키워드 가 끌 어 내 는 여러 가지 잠 금 문제


머리말
자바 의synchronized키 워드 는 다 중 스 레 드 환경 에서 스 레 드 안전 한 동기 화 잠 금 으로 사용 할 수 있 습 니 다.본 고 는synchronized의 구체 적 인 사용 을 토론 하지 않 고synchronized저층 의 자물쇠 체제 와 이런 자물쇠 의 장단 점 을 연구 하고 자 한다.
동기 화 된 메커니즘synchronized키 워드 는 JAVA 에서 자주 사용 하 는 동기 화 기능 으로 간단 하고 사용 하기 쉬 운 잠 금 기능 을 제공 합 니 다.synchronized세 가지 용법 이 있 는데 그것 이 바로 다음 과 같다.
일반적인 방법 에 사용 하면 현재 대상 을 잠 글 수 있 습 니 다.정적 방법 에 사용 하면 클래스 를 잠 글 수 있 습 니 다.코드 블록 에 사용 할 수 있 습 니 다.잠 긴 것 은synchronized()의 대상 입 니 다.
JDK 6 이전에synchronized는 헤비급 잠 금 제 를 사 용 했 고 그 후에synchronized잠 금 팽창 체 제 를 추가 하여synchronized키워드 의 효율 을 현저히 향상 시 켰 다.synchronized키 워드 를 바탕 으로 우 리 는 다음 몇 가지 유형의 자 물 쇠 를 이해 하고synchronized의 자물쇠 팽창 체 제 를 설명 한다.synchronized자 물 쇠 는 불공평 한 자물쇠 이다.그리고synchronized잠 긴 대상 이나 종 류 는 바로 자물쇠 이다.
또한 모든 자 물 쇠 는 자바 대상 의 머리 에 저 장 된 것 으로 자바 대상 의 머리 에 있 는 Mark Word 에 기본적으로 저 장 된 대상 의 HashCode,세대 별 연령 과 자물쇠 표시 위치 입 니 다.그 러 니까 마크 워드 가 잠 긴 상 태 를 기록 한 거 예요.
이 자물쇠 팽창 메커니즘 과 몇 가지 자물쇠
자물쇠 의 팽창 은 거 스 를 수 없다.
2.1 편향 잠 금synchronizedJDK 1.6 이후 기본 오픈 ,synchronized처음에는 모두 표현:한 스 레 드 가 자 물 쇠 를 성공 적 으로 가 져 온 후에 대상 의 머리 에 스 레 드 ID 를 기록 합 니 다.이후 에 이 스 레 드 가 자 물 쇠 를 가 져 오고 방출 하 는 데 아무런 비용 이 들 지 않 습 니 다.(이 자 물 쇠 는 이 스 레 드 에 연결 되 어 있 고 팽창 하기 전에 변 하지 않 기 때 문 입 니 다.다른 스 레 드 가 이 자 물 쇠 를 가 져 오 려 고 시도 하면 팽창 합 니 다 .
장점:하나의 스 레 드 만 자 물 쇠 를 사용 할 때 자 물 쇠 를 가 져 오고 종료 하 는 데 비용 이 들 지 않 습 니 다.
단점:자물쇠 경쟁 이 치열 하면 곧 으로 업그레이드 된다.그러면 유지 하 는 과정 은 컴퓨터 자원 을 낭비 하 는 것 이다.(그러나 자체 가 가 벼 워 낭비 하 는 자원 이 많 지 않다)
소결:하나의 스 레 드 만 자 물 쇠 를 사용 하 는 경우synchronized사용 하 는 자 물 쇠 는 입 니 다.
잠 금 경쟁 이 치열 하면 JDK 설정 을 통 해 비활성화 할 수 있 습 니 다.
2.2 경 량 자물쇠
한 개의 자물쇠 가 한 라인 에 만 사용 되 지 않 으 면 팽창 표현:스 레 드 획득 시 대상 의 머리 에 잠 긴 기록 을 직접 수정 합 니 다.수정 에 실패 하면 이때 잠 금 에 여러 스 레 드 의 경쟁 이 존재 한 다 는 뜻 입 니 다.CAS 로 팽창 합 니 다.
장점:스 레 드 간 에 자 물 쇠 를 사용 하여 경쟁 이 존재 하지 않 을 때 한 번 조작 하면 자 물 쇠 를 얻 고 종료 할 수 있 습 니 다.
단점:CAS와 유사
소결:한 개의 자물쇠 가 한 스 레 드 만 가 져 온 것 이 아니 라 팽창 할 것 이다 .
2.3 중량 자물쇠
한 개의 자물쇠 가 다 중 스 레 드 경쟁 이 존재 하면 자전 을 시작 하고 일정한 횟수 를 회전 한 후에 도 자 물 쇠 를 얻 지 못 하면 (경쟁 이 존재 할 때 로 팽창 한다.
표현:스 레 드 가 져 오기 에 실 패 했 을 때(즉,잠 금 이 다른 스 레 드 에 의 해 가 져 왔 음)를 가 져 오 면 을 사용 합 니 다.일정 횟수 를 회전 한 후에 도 잠 금 을 가 져 오지 않 으 면 차단 대기 열 에 들 어가 서 기다 리 십시오.
장점:가 져 오지 않 은 자물쇠 가 차단 대기 열 에 들 어가 CPU 자원 을 절약 합 니 다.(그래,장점 이 없 는 것 같 아.)
단점: 은 대상 내부 의 모니터(monitor)를 통 해 이 루어 진 것 이다.그 중에서 monitor 의 본질은 바 텀 운영 체제 의 Mutex Lock 에 의존 하여 이 루어 진 것 이다.운영 체제 가 스 레 드 간 의 전환 을 실현 하려 면 사용자 상태 에서 커 널 상태 로 전환 해 야 하고 전환 비용 이 매우 높다.
소결:자물쇠 하나 에 다 중 스 레 드 경쟁 이 존재 하면 팽창 .
자전거 자물쇠 ,synchronized을 사용 하여 성능 최적화
먼저 소개 표현:스 레 드 가 자 물 쇠 를 가 져 오 는 데 실 패 했 을 때 차단 대기 에 들 어가 지 않 고 다시 자 물 쇠 를 가 져 오 려 고 시도 합 니 다.이렇게 반복 하면 자 물 쇠 를 가 져 오 거나 자전 이 끝 날 때 까지 기다 리 는 것 을 막 을 수 있 습 니 다.
문제 해결:어떤 장면 에서 라인 이 자 물 쇠 를 가지 고 있 는 시간 이 매우 짧다.온라인 프로 세 스 가 잠 금 을 가 져 오 는 데 실 패 했 을 때 스 레 드 가 막 히 면 스 레 드 컨 텍스트 의 전환 을 가 져 올 수 있 습 니 다.컨 텍스트 전환 시간 은 스 레 드 가 반복 적 으로 잠 금 을 가 져 오 는 시간 보다 높 을 수 있 습 니 다.
이 때 스 레 드 는 자 물 쇠 를 다시 가 져 오 기 를 제자리 에서 기다 리 고 있 습 니 다.오히려 성능 면 에서 유리 하 다.
단점:
단일 핵 CPU 가 스 레 드 없 이 병렬 되 어 있 으 며,반복 적 으로 시도 하면 프로 세 스 가 계속 실 행 될 수 없습니다.반복 적 인 시도 로 인해 CPU 가 점용 되 었 고 CPU 자원 이 부족 하면 오히려 성능 이 떨 어 질 수 있 습 니 다.잠 금 경쟁 시간 이 길 면 성능 향상 은 물론 CPU 자원 도 많이 낭비 되 었 습 니 다.
최적화:사용 .자가 적응 자전 자 물 쇠 는 이전의 자물쇠 에 따라 기록 을 얻 고 자전 시간 을 최적화 하여 불필요 한 자전 을 초래 하지 않도록 한다.
3 구체 적 인 동기 화 프로 세 스

총결산
위 에서 말 한 것 은 소 편 이 소개 한 자바 에서 synchronized 키 워드 를 끌 어 내 는 여러 가지 자물쇠 문제 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기