자바 병발 --- 상호 배척 동기 화

4367 단어 자바병발 하 다
자바 는 두 가지 잠 금 메커니즘 을 제공 하여 다 중 스 레 드 가 상호 배척 자원 에 대한 상호 배척 방문 을 제어 합 니 다. 하 나 는 JVM 이 실현 하 는 synchronized 이 고 하 나 는 JDK 가 실현 하 는 RentranLock 입 니 다.
synchronized
  • 코드 블록 동기 화;한 대상 에 만 작용 하고 두 개의 서로 다른 대상 의 동기 코드 블록 을 호출 하면 동기 화 되 지 않 습 니 다.
    public class SynchronizedExample {
    
        public void func1() {
            synchronized (this) {
                for (int i = 0; i < 10; i++) {
                    System.out.print(i + " ");
                }
            }
        }
    }
    
  • 동기 화 방법;동기 코드 블록 과 마찬가지 로 같은 대상 에 만 작 동 합 니 다.
    public synchronized void func () {
        // ...
    }
    
  • 같은 종 류 를 동기 화 합 니 다.전체 클래스, 즉 두 스 레 드 가 같은 유형의 서로 다른 대상 의 동기 화 문 구 를 호출 하 는 것 도 동기 화 된다.
    public void func() {
        synchronized (SynchronizedExample.class) {
            // ...
        }
    }
    
  • 정적 방법 을 동기 화 합 니 다.전체 클래스 에 작용
    public synchronized static void fun() {
        // ...
    }
    
  • RentranLock
    RentranLock 은 java. util. concurrent (J. U. C) 가방 의 자물쇠 입 니 다.자바 병발 의 ReentrantLock 상세 설명
    양자 의 공통점 과 차이 점
  • 자물쇠 의 실현;synchronized 는 JVM 구현, RentranLock 은 JDK 구현
  • 성능: 새로운 버 전의 자바 가 synchronized 에 대해 많은 최적화 를 했 기 때문에 예 를 들 어 자 회전 자물쇠 등 두 가지 성능 은 대체적으로 같다
  • .
  • 대기 중단 가능;한 스 레 드 가 오랫동안 자 물 쇠 를 풀 지 않 을 때, 다른 기다 리 는 스 레 드 는 다른 일 을 처리 하 는 것 을 포기 할 수 있다.RentranLock 은 중단 할 수 있 지만 동기 화 되 지 않 습 니 다
  • 공평 자물쇠;즉, 여러 스 레 드 가 같은 자 물 쇠 를 기다 리 고 있 을 때 자 물 쇠 를 신청 하 는 시간 순서에 따라 자 물 쇠 를 가 져 와 야 한 다 는 것 이다.synchronized 의 자 물 쇠 는 불공평 합 니 다.RentranLock 의 기본 자물쇠 도 불공평 하지만 공평 할 수도 있 습 니 다
  • 귀속 조건;하나의 RentranLock 은 여러 Condition 대상 을 연결 할 수 있 습 니 다.한 자물쇠 에 여러 조건 사용 (Condition)
  • 좋은 웹페이지 즐겨찾기