Java 동시 실행 (2) - synchronized 키워드와volatile 키워드

6110 단어

synchronized 키워드


synchronized 키워드는 여러 라인 사이의 자원에 접근하는 동기화를 해결합니다. synchronized 키워드는 수식된 방법이나 코드 블록이 임의의 시간에 한 라인만 실행될 수 있도록 보장합니다.synchronized 키워드의 기본 원리는 JVM 레벨에 속합니다.
사용:
  • 수식 실례 방법: 현재 대상의 실례 잠금에 작용하고 동기화 코드에 들어가기 전에 현재 대상의 실례 잠금
  • 을 획득해야 한다.
  • 정적 수식 방법: 현재 클래스에 자물쇠를 채우는 것이 클래스의 모든 대상 실례에 작용할 수 있기 때문에 만약에 하나의 라인 A가 실례 대상의 비정상적인synchronized 방법을 호출한다면 라인 B는 이 실례 대상이 속하는 정적synchronized 방법을 호출해야 한다. 허용되고 상호 배척 현상이 발생하지 않는다. 정적synchronized 접근 방법이 차지하는 자물쇠는 현재 클래스의 자물쇠이기 때문이다.비정상적인synchronized에 접근하는 방법이 차지하는 자물쇠는 현재 실례적인 대상 자물쇠입니다.
  • 수식 코드 블록: 잠금 대상을 지정하고 주어진 대상에 잠금을 가하며 동기화 코드 라이브러리에 들어가기 전에 주어진 대상의 잠금을 획득해야 한다.

  • synchronized 동기화 문장 블록
    public class SynchronizedDemo {
        public void method() {
            synchronized (this) {
                System.out.println("synchronized  ");
            }
        }
    }
    

    synchronized 수식 방법
    public class SynchronizedDemo2 {
        public synchronized void method() {
            System.out.println("synchronized  ");
        }
    }
    

    총괄:synchronized 키워드를static 정적 방법과synchronized(class) 코드 블록에 추가하면 모두class 클래스에 자물쇠를 채웁니다.synchronized 키워드를 실례 방법에 추가하는 것은 대상의 실례에 자물쇠를 채우는 것입니다.
    이중 검사 잠금 실현 대상 단일 (라인 보안)
    public class Singleton {
    	//  volatile   JVM  , 
        private volatile static Singleton uniqueInstance;
    
        private Singleton() {
        }
    
        public static Singleton getUniqueInstance() {
           // , 
            if (uniqueInstance == null) {
                // 
                synchronized (Singleton.class) {
                    if (uniqueInstance == null) {
                        uniqueInstance = new Singleton();
                    }
                }
            }
            return uniqueInstance;
        }
    }
    

    volatile 키워드


    volatile 키워드의 주요 역할은 변수의 가시성을 확보하는 것이다. 그리고 또 하나의 역할은 명령의 재배열을 방지하는 것이다.

    synchronized 키워드와volatile 키워드의 차이

  • volatile 키워드는 라인 동기화의 경량급 실현이기 때문에volatile 성능은synchronized 키워드보다 틀림없이 좋다.그러나volatile 키워드는 변수에만 사용되고synchronized 키워드는 수식 방법과 코드 블록을 수식할 수 있습니다.synchronized 키워드는 Javase1에 있습니다.6 이후 자물쇠를 획득하고 방출하는 데 가져오는 성능 소모를 줄이기 위해 도입된 편향 자물쇠와 경량급 자물쇠, 그리고 기타 각종 최적화를 실시한 후에 집행 효율이 현저히 향상되었고 실제 개발에서synchronized 키워드를 사용하는 장면이 더 많았다.
  • 다중 루틴 접근volatile 키워드는 막히지 않으며,synchronized 키워드는 막힐 수 있음
  • volatile 키워드는 데이터의 가시성을 보장할 수 있으나 데이터의 원자성을 보장할 수 없다.synchronized 키워드는 둘 다 보장합니다.
  • volatile 키워드는 변수가 여러 라인 사이의 가시성을 해결하는 데 사용되며,synchronized 키워드는 여러 라인 사이의 접근 자원의 동기성을 해결한다.
  • 좋은 웹페이지 즐겨찾기