동기화 초보자의 흰색 --java 동시 프로그래밍 자바 도로

동기화 초급

요약하면 (무엇을)

자바 개발과 연락은 거의 해였습니다 그것을 가지고 있었다 단순히 비즈니스 기능을 달성하기 위해 고정 된 모델에 따라 회사가 제공하는 프레임 워크를 사용합니다. 다시 생각 나는 자바 개발에 더 가고 싶어, 그래서 무엇보다도 먼저 이해하고 자바 병행 프로그래밍을 파악하려면

내가 동기화 된 키워드를 알고 이해하지 못하는 경우에도 동시 프로그래밍을 배우고 싶다, 그 역할은 공유 리소스 보안 문제에 접근하는 여러 개의 동시 스레드를 제어 정보를 통해 배운 수집하는 것입니다 :

현재 실행중인 스레드의 완료 동기화 경쟁을 변경할 때까지 계속 두 개 이상의 스레드가 동일 개체 액세스의 동기 블록에 동기 할 때 1. 실행 경쟁 스레드 자원 변경 만이 있고, 또 다른 스레드는 대기해야 실행 오른쪽 코드 블록;

하나 개의 스레드에 동기 한 동기 블록의 타겟 오브젝트를 액세스하는 경우 2. 다른 스레드는 다른 모든 대상체가 차단 동기 부호 블록에 액세스;

스레드 동기화 방법은 객체의 메소드를 호출하고 차례로 동기화 방법은 개체 자체의 동기화 개체의 다른 방법을 호출 : 같은 반복 작업을 동일한 개체의 잠금을 수행 할 때 3. 스레드를 얻을 수 있습니다. (수, 오브젝트가 해제되면이 경우, 트랙 JVM 개체의 수, 오브젝트의 로크 한 수, 각 태스크는 오브젝트의 로크, +1 로크의 개수를 획득 할 때마다 잠금 경쟁의 시작 부분에 작업을 떠날 때마다 한 번 잠금이 0이 될 때까지 점차 수를 감소, 마이너스 1에 잠금 수를 방법을 동기화하기 때문에) 만 성공 잠금 스레드 작업 순서는 여러 가지 잠금을 수상 것을 알 수있는 자원이다 전체 버전은, 다른 작업이 자원에 대한 경쟁을 시작할 수 있습니다;

때 사용하는 (경우)

 브라이언 동기화 규칙 : 당신이 "쓰기"가 "읽기"합니다 다른 스레드 다음에 할 수있는 변수가있는 경우, 다른 스레드가 이미 변수를 통해 "기록"하는 마지막을 당신을 "읽기"취하거나 있습니다 당신은 동기화를 사용하고, / "쓰기"스레드가 같은 모니터 락으로 동기화되어야합니다 "읽기"해야합니다.

참고 : 중요한 방법은 동기화되어야합니다 공유 리소스에 각 액세스를, 그렇지 않으면 제대로 작동하지 않습니다.

사용 방법 (방법)

두 용도 포함 키워드 동기화 동기화 방법 동기화 블록 .
  • 동기화 方法 :
공개  동기화  무효 countNum ( INT의 N) {}

모든 방법은 특정 개체 공유 같은 잠금 동기화,이 메커니즘은 클래스에 대응하는 대부분의 하나 개의 인스턴스에서 획득 할 수있는 클래스의 각 인스턴스에 대해 동일한 타이밍이 멤버 함수 (모두 실행 상태에서 최대 하나의 동기화 선언의 보장 효과적으로 액세스 위반 반원 변수를 피하도록 가능한 한 모든 방법) 반원 동기화 변수로 선언되어 액세스하도록 (,)를 잠글. 

  동기화로뿐만 아니라를, 정적 메서드는 클래스의 정적 멤버 변수에 대한 액세스를 제어하기 위해, 선언 할 수 있습니다.

공용  정적  동기화  공극 countNum ( INT의 N) {}

 

결함 방법을 동기화 : 동기화 방법에 대한 큰 문이 크게 효율성에 영향을 미치지 않습니다.

  스레드 클래스 실행 ()의 메소드가 스레드의 수명 전반에 걸쳐 사용했습니다대로이 클래스의 호출로 이어질 수 있도록, 동기화로 선언하면 일반적이다 동기화 방법은 성공하지 못할 것입니다. 물론, 우리는 동기로 선언 특별한 방법으로 액세스 클래스 멤버 변수를 코딩 할 수 있으며, 통화가 주요 방법의 문제를 해결하기 위해,하지만 자바는 우리를 위해 더 나은 솔루션을 제공하고, 즉 동기 블록.

  • 块 동기화 :
동기화 (SyncObject.Class는) { 
     // 코드는 액세스 제어를 할 수 있습니다 
}

또한 다음과 같은 형식으로 기록 할 수 있습니다,이 항아리는 현재 클래스를 참조

동기화 ( ) { 
     // 액세스 제어 코드를 허용 
}

잠금 동기화 블록 코드는 피사체 SyncObject 있어야 수행하기 위해, 특정기구의 문헌 (상기 한 바와 같이, 클래스 또는 클래스 인스턴스 일 수있다). 코드의 블록 이후 임의로 지정된 오브젝트가 잠겨 있으므로 더 유연 할 수도있다.

  동기화 블록을 사용하는 경우, 브라이언 동기화 규칙을 준수해야하고, 중요한 공유 리소스에 액세스하는 각각의 방법은 동기화됩니다.

 

참조 :

https://blog.csdn.net/yuan1013922969/article/details/54971632

 

추천

출처www.cnblogs.com/EtherealWind/p/11131264.html