>  기사  >  Java  >  wait(), inform() 및 informAll() 메소드는 어떤 클래스에 속합니까?

wait(), inform() 및 informAll() 메소드는 어떤 클래스에 속합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-06 11:27:30432검색

Which Class Do the wait(), notify(), and notifyAll() Methods Belong To?

1. wait(), inform() 및 informAll() 메소드 이해

wait(), notify()notifyAll() 메서드는 Java 동시성 모델의 핵심입니다. 이는 Java 클래스 계층 구조의 루트인 Object 클래스에 속합니다. 즉, Java의 모든 클래스는 Object 클래스에서 이러한 메서드를 상속받습니다.

1.1 객체 클래스

Object 클래스는 Java의 모든 클래스의 슈퍼클래스입니다. toString(), equals()hashCode()를 포함하여 모든 클래스가 상속하는 기본 메서드 집합을 제공합니다. wait(), notify()notifyAll() 메서드도 이 클래스의 일부이므로 스레드가 활동을 통신하고 조정할 수 있습니다.

1.2 wait(), inform(), informAll()의 역할

  • wait(): 이 메서드는 다른 스레드가 동일한 개체에 대해 notify() 또는 notifyAll()을 호출할 때까지 현재 스레드를 기다리게 합니다. 동기화된 블록이나 메서드 내에서 호출해야 합니다.
  • notify(): 이 메소드는 객체의 모니터(스레드 잠금)에서 대기 중인 단일 스레드를 깨웁니다. 여러 스레드가 대기 중인 경우 그 중 하나가 임의로 선택됩니다.
  • notifyAll(): 이 메소드는 객체의 모니터에서 대기 중인 모든 스레드를 깨웁니다. 이는 상태 변경에 대해 여러 스레드에 알려야 할 때 유용합니다.

2. wait(), inform(), informAll() 실제로 사용하기

이러한 방법의 작동 방식을 이해하기 위해 몇 가지 실제 예를 살펴보겠습니다.

2.1 예제 코드

다음은 이러한 방법의 사용을 보여주는 간단한 예입니다.


class SharedResource {
    private boolean available = false;

    public synchronized void consume() throws InterruptedException {
        while (!available) {
            wait(); // Wait until the resource is available
        }
        // Consume the resource
        System.out.println("Resource consumed.");
        available = false;
        notify(); // Notify that the resource is now unavailable
    }

    public synchronized void produce() {
        // Produce the resource
        available = true;
        System.out.println("Resource produced.");
        notify(); // Notify that the resource is available
    }
}

public class Main {
    public static void main(String[] args) {
        SharedResource resource = new SharedResource();

        Thread producer = new Thread(() -> {
            try {
                while (true) {
                    Thread.sleep(1000); // Simulate time to produce
                    resource.produce();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        Thread consumer = new Thread(() -> {
            try {
                while (true) {
                    resource.consume();
                    Thread.sleep(2000); // Simulate time to consume
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        producer.start();
        consumer.start();
    }
}


2.2 데모 결과

위의 예에서:

  • 생산자 스레드는 주기적으로 리소스를 생산하고 소비자에게 알립니다.
  • 소비자 스레드는 리소스를 사용할 수 있을 때까지 기다렸다가 소비한 다음 필요한 경우 생산자에게 알립니다.

생산자와 소비자 작업을 나타내는 다음 출력이 표시됩니다.


Resource produced.
Resource consumed.
...


이 출력은 wait(), notify()notifyAll()이 생산자와 소비자 상호 작용을 조정하는 방법을 보여줍니다.

3.결론

wait(), notify(), notifyAll() 메소드가 어떤 클래스에 속해 있는지, 어떻게 동작하는지를 이해하면 효율적으로 관리할 수 있습니다. Java 애플리케이션의 스레드 간 통신. 이러한 방법은 스레드가 효율적으로 협력하고 리소스를 공유하도록 보장하는 데 필수적입니다.

질문이 있거나 추가 설명이 필요한 경우 아래에 댓글을 남겨주세요!

에서 더 많은 게시물을 읽어보세요. wait(), inform() 및 informAll() 메서드는 어느 클래스에 속합니까?

위 내용은 wait(), inform() 및 informAll() 메소드는 어떤 클래스에 속합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:jUnit - Java의 단위 테스트다음 기사:없음