사이의 자바 병행 프로그래밍 스레드 협력

스레드 간의 협력

대기 및 통지 (1)

표준 형태의 통지를 대기
에 의해 대기 :

  1. 객체 잠금을 가져옵니다
  2. 루프 판정 조건을 만족하지 통화 대기 () 메소드
  3. 실행 비즈니스 로직 조건이 충족된다

파티 통보 :

  1. 취득 목적
  2. 변경 조건
  3. 객체를 기다리는 모든 스레드를 통보

2. 대기 통보 /의 notifyAll

대기는 : 다른 thread가 현재의 싱크 모니터 호출 할 때까지, 현재의 thread의 원인 notify()또는 notifyall()이 스레드를 깨우는 방법. wait()세 가지 방법이 형태입니다 - 시간 매개 변수 및 밀리 초와 나노초 매개 변수 (자동 웨이크 업 지정된 시간 후)) 밀리 초 매개 변수 (와 waut 대기 (다른 스레드의 통지 할 때까지 대기를) 기다릴
알림 : 이 동기화를 깨워 단지 활성화 스레드를 기다리고 있지만, 구현을 계속하려면 다시에 대한 잠금을 얻을 수있다;이 모니터 동기화를 기다리는 여러 스레드가있는 경우 모니터에 대기중인 단일 스레드는 만이를 임의의 스레드를 호출 즉 원래는 여전히 획득 잠금을 계속할 수 없습니다 스레드를 기다리고 있기 때문에, 한 잠금이 해제되지 않았기 때문에 말을하는 것입니다.
가는 notifyAll : 스레드의이 모니터 동기화에 대한 모든 대기 일어나 모든 스레드가 활성화됩니다.

대기 () 메소드에서 알림 () 메소드 notiftAll () 메소드 java.lang.Object그렇지 예외 (예외 : IllegalMonitorStateException) 발생되는 공유 데이터에 대한 다중 스레드 액세스를 조정하는, 상기 방법은 오직 동기 또는 동기 블록으로 사용될 수있다.

가입 3

스레드 () 메소드 --join 완전한 실행 방법에 다른 스레드에 대한 스레드 대기 메이크 제공하며, 조인 될 때까지 프로그램이 다른 스레드에서 실행될 때 호출에 참여는 () 메서드 호출 스레드가 차단됩니다 () 메소드 조인 때까지 스레드가 완료됩니다.

static class JoinQueue implements Runnable {
    private Thread thread;
    public JoinQueue(Thread thread) {
        this.thread = thread;
    }
    @Override
    public void run() {
        try {
            thread.join();
            System.out.println(Thread.currentThread().getName()+" terminted.");
        } catch (InterruptedException e) {
            e.printStackTrace();
            Thread.currentThread().interrupt();
        }
    }
}

public static void main(String[] args) throws InterruptedException {
    Thread previous = Thread.currentThread();
    for (int i = 0; i < 10; i++) {
        Thread thread = new Thread(new JoinQueue(previous), String.valueOf(i));
        System.out.println(" thread " + previous.getName() + " is in front of " + thread.getName());
        thread.start();
        previous = thread;
    }
    Thread.sleep(2000);
    System.out.println(Thread.currentThread()+" done");
}

4. 호출 수율 (), 수면 (), 대기 ()의 효과는 잠금 등) (통지

스레드 실행 수율 () 잠금을 보유 후이 해제되지 않으며,
SLEEP () 메소드가 호출 된 후, 잠금 해제에 의해 보관 유지되어 있지 않은 경우,
대기 () 스레드가 잠금을 보유해야합니다 전에 메소드가 호출되어, 통화 대기 () 방법의 경우 잠금이 해제됩니다 대기 () 다시 잠금을 수용하는 스레드 때 메서드가 반환,
호출 ) (통지 방법 전에, 그것은 잠금을 유지하는 것이 필요하다, 호출 (통지) 방법 자체가 잠금을 해제하지 않습니다 .

추천

출처www.cnblogs.com/huizhipeng/p/12079958.html