자바 멀티 스레딩 : 3, 잠을 (), 대기 (), (통지)의 차이를가는 notifyAll 사이에 (), 실행 (), 시작 ()?

수면 (), 대기 제외한 1 ()의

수면 () : 지정 스레드 수면, 잠을로 이동합니다. CPU가 계속이 스레드를 할당하기 위해 우리는 기다리고, 준비 상태, 지정된 시간 후 CPU를 수 있도록 주도권을 쥐고 들어갑니다. 이 과정에서이 잠금을 해제하지 않습니다. (지주 잠 오브젝트, 잠금을 해제하지 않음)

대기 () : 인터럽트 스레드가 너무 스레드 대기 일시적으로 CPU를 사용할 수있는 권리를 포기하는 것으로, 실행 및 다른 스레드가이 동기화 방법을 사용할 수 있습니다. 이 잠금을 해제합니다. 다른 스레드가 통지 (),가는 notifyAll () 메소드를 호출 만하면, 대기 스레드는 공식적으로 잠금을 획득하기 위해 경쟁에 합류하지만, 즉시 잠금이 해제 된 후 그들이 잠금을 얻을 수 있습니다 전에 대기하는 잠금을 획득하지 않았습니다.

도 2에 도시 된 바와 같이, 차이 ()의 notifyAll 통지 ()의

이해하기 통지 ()의 notifyAll ()의 차이, 우리는 먼저 잠금 수영장과 대기 풀을 이해해야합니다.

잠금 풀 : 만 잠금 객체를 가져, 코드 개체를 실행하는 동기화 스레드가 잠금은 하나의 스레드 만 얻을 수있는 객체, 다른 스레드는 잠금 풀 기다릴 수

풀을 기다립니다 가설 A를 후 스레드 호출이 객체를 기다릴 풀로, 객체 () 메소드 스레드 A가 출시에게 개체의 잠금을 기다린 스레드는 개체의 경쟁 잠금을 풀 때까지 기다리지 않습니다 .

() 통지 : 임의의 스레드 웨이크 객체는 잠금 장치로, 수영장에서 풀을 기다리고.

가는 notifyAll () : 오브젝트 풀, 잠금에 풀을 기다리는 모든 스레드를 깨워.

그래서 스레드를 깨워, 스레드 풀을 잠그는 풀을 기다리고,가는 notifyAll 호출 후에, 모든 스레드가 잠금 풀, 잠금을 풀 대기로 이동합니다 실패한 경우 다음를 유지하기 위해, 계속 성공적으로 경쟁, 경쟁에 참여 잠금을 기다리는 잠금 풀 후 다시 경쟁하기 위해 출시한다. 웨이크는 스레드를 통지합니다.

왜 대기 (), () 교착 상태를 발생합니다 통보?
나는 보충을 알고 모른다.

3, 차이의 실행이 (), 시작 ()의

일반적으로, 시스템이 스레드를 시작 () 메서드 호출 스레드 클래스를 시작, 스레드는 현재 준비 상태에있다. 쓰레드가 CPU 인 경우에만 자동 실행 () 메소드, 죽음의 상태로 스레드의 종료 후, 운영에 자신의 run () 메소드를 호출합니다.

직접 호출 스레드의 run () 메소드 경우, 일반 함수 호출로 취급되며, 새 스레드를 열 수 없습니다. 직접 전화 run () 메소드가 동기, 그것은 여러 스레드의 목적을 달성하고, 시작 () 메소드가 비동기 적으로 실행 () 메소드를 호출 할 수 있습니다, 멀티 스레딩을 달성 할 수 없습니다.

게시 57 개 원래 기사 · 원의 찬양 (13) · 전망 1097

추천

출처blog.csdn.net/weixin_42924812/article/details/105209868