공원 및 언 파킹
기본 사용
그들은 클래스 메소드의 LockSupport
// 暂停当前线程
LockSupport.park();
// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)
특징
대기 및 통지 객체와 비교
- 대기 통보와의 notifyAll에 언 파킹이없는, 개체 모니터, 공원과 함께 사용되어야합니다
- 공원 및 언 파킹 스레드] [단위로 차단 [] 스레드를 깨워, 스레드를 기다리는에만 임의의 여파에 통보되어,의 notifyAll] [모든 대기 스레드, 그래서 정확하지 않은 깨어
- 공원 및 언 파킹 캔 첫번째 언 파크, 그리고 기다리는 및 통지 통지
공원 언 파킹 원칙
각 스레드는 자신의 파커 객체가 세 부분으로 구성되어있다 counter
, cond
그리고 mutex
비유를 그릴
- 여행자처럼 스레드, 파커 자신의 기내 반입 가방 같은 조건 변수 비율과 같은 배낭 텐트. 배낭 대체 건조 식품 등 _counter (0 공핍 충분한 1)
- 는 IT가 보는 것이다 공원 또는 중지해야하고 나머지 전화
- 예비 식량이 고갈 된 경우, 휴식을 텐트에있어
- 충분한 예비 건조 식품하면, 그래서 중지하고 이동 할 필요가 없습니다
- 너무 건조 식품 충분한에게 같은 통화 언 파크,
- 그런 다음 여전히 텐트를 스레드 경우, 그래서 그는 일어나 이동 것
- 스레드가 여전히이 시간에 실행되고있는 경우 다음 번에 그는 마른 음식에 이동 유지하지 않고, 여분의 소비, 공원을 호출
- 때문에 제한된 가방 공간, 언 파킹를 여러 번 호출 만 예비 건조 식품을 추가
- 때문에 제한된 가방 공간, 언 파킹를 여러 번 호출 만 예비 건조 식품을 추가
- 현재 스레드가 Unsafe.park () 메서드를 호출
- _mutex 뮤텍스를 얻기 위해,이 상황이 0이 시간을 _counter 확인
- 차단 된 상태 변수로 스레드 _cond
- 제공자 _counter = 0
- 통화 Unsafe.unpark (Thread_0)에있어서, 1 세트 _counter
- 조건 변수 Thread_0을 _cond 웨이크
- Thread_0 다시 시작 작업
- 0으로 세트 _Counter