자바 병행 프로그래밍 노트 팔

공원 및 언 파킹

기본 사용

그들은 클래스 메소드의 LockSupport

// 暂停当前线程
LockSupport.park();
// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)

특징

대기 및 통지 객체와 비교

  • 대기 통보와의 notifyAll에 언 파킹이없는, 개체 모니터, 공원과 함께 사용되어야합니다
  • 공원 및 언 파킹 스레드] [단위로 차단 [] 스레드를 깨워, 스레드를 기다리는에만 임의의 여파에 통보되어,의 notifyAll] [모든 대기 스레드, 그래서 정확하지 않은 깨어
  • 공원 및 언 파킹 캔 첫번째 언 파크, 그리고 기다리는 및 통지 통지

공원 언 파킹 원칙

각 스레드는 자신의 파커 객체가 세 부분으로 구성되어있다 counter, cond그리고 mutex비유를 그릴

  • 여행자처럼 스레드, 파커 자신의 기내 반입 가방 같은 조건 변수 비율과 같은 배낭 텐트. 배낭 대체 건조 식품 등 _counter (0 공핍 충분한 1)
  • 는 IT가 보는 것이다 공원 또는 중지해야하고 나머지 전화
    • 예비 식량이 고갈 된 경우, 휴식을 텐트에있어
    • 충분한 예비 건조 식품하면, 그래서 중지하고 이동 할 필요가 없습니다
  • 너무 건조 식품 충분한에게 같은 통화 언 파크,
    • 그런 다음 여전히 텐트를 스레드 경우, 그래서 그는 일어나 이동 것
    • 스레드가 여전히이 시간에 실행되고있는 경우 다음 번에 그는 마른 음식에 이동 유지하지 않고, 여분의 소비, 공원을 호출
      • 때문에 제한된 가방 공간, 언 파킹를 여러 번 호출 만 예비 건조 식품을 추가
        그림 삽입 설명 여기
  1. 현재 스레드가 Unsafe.park () 메서드를 호출
  2. _mutex 뮤텍스를 얻기 위해,이 상황이 0이 시간을 _counter 확인
  3. 차단 된 상태 변수로 스레드 _cond
  4. 제공자 _counter = 0
    그림 삽입 설명 여기
  5. 통화 Unsafe.unpark (Thread_0)에있어서, 1 세트 _counter
  6. 조건 변수 Thread_0을 _cond 웨이크
  7. Thread_0 다시 시작 작업
  8. 0으로 세트 _Counter
게시 93 개 원래 기사 · 원 찬양 31 ·은 30000 +를 볼

추천

출처blog.csdn.net/weixin_43866567/article/details/104976328