検索
ホームページJava&#&チュートリアルJava のオブジェクト メソッドの詳細な分析: 待機と通知

Java のオブジェクト メソッドの詳細な分析: 待機と通知

Dec 20, 2023 pm 12:47 PM
notify待ってJavaオブジェクトメソッド:待機オブジェクトメソッドのプログラミング

Java のオブジェクト メソッドの詳細な分析: 待機と通知

Java のオブジェクト メソッド: wait と Notice の詳細な説明

Java では、オブジェクト メソッド wait と Notice は、スレッド間のコラボレーションと通信のための重要なツールです。これらは、スレッドが他のスレッドの実行を待機したり、適切なタイミングで起動したりするのに役立ちます。この記事では、wait メソッドと Notice メソッドの使用方法を詳しく紹介し、具体的なコード例を示します。

1. wait メソッドの使用

wait メソッドは、他のスレッドが同じオブジェクトの Notice メソッドを呼び出すか、notifyAll メソッドによってウェイクアップされるまで、現在のスレッドを待機状態にするために使用されます。上。 wait メソッドの形式は次のとおりです。

  1. void wait(): 他のスレッドが起動するまで現在のスレッドを待機させます。
  2. void wait(long timeout): 現在のスレッドを、指定されたミリ秒数の間、または他のスレッドがウェイクアップするまで待機させます。
  3. void wait(long timeout, int nanos): 現在のスレッドは、指定されたミリ秒数に指定されたナノ秒数を加えた時間、または他のスレッドがウェイクアップするまで待機します。

wait メソッドを使用する場合は、オブジェクトを確実にロックするために同期されたコード ブロックにこのメソッドを含める必要があります。以下は典型的な例です。

public class WaitNotifyExample {
    private boolean flag = false;
    
    public synchronized void waitForFlag() {
        try {
            while (!flag) {
                wait(); // 当前线程等待
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 执行其他操作
    }
    
    public synchronized void setFlag() {
        flag = true;
        notify(); // 唤醒正在等待的线程
    }
}

上の例では、waitForFlag メソッドを呼び出した後、他のスレッドが setFlag メソッドを呼び出してスレッドを起動するまで、スレッドは待機状態になります。

2. notification メソッドの使用

notify メソッドは、待機中のスレッドをウェイクアップするために使用されます。ウェイクアップするスレッドがランダムに選択されます。複数のスレッドが待機している場合は、そのうちの 1 つだけをウェイクアップできます。通知メソッドの使用形式は次のとおりです。

public class NotifyExample {
    public synchronized void waitForNotify() {
        try {
            wait(); // 当前线程等待
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 执行其他操作
    }
    
    public synchronized void notifyThread() {
        notify(); // 唤醒一个等待的线程
    }
}

上記の例では、waitForNotify メソッドを呼び出したスレッドは、他のスレッドが通知スレッド メソッドを呼び出して起動するまで待機状態になります。

3. スレッド間コラボレーションを実現するために待機と通知を使用する

待機メソッドと通知メソッドは、プロデューサー/コンシューマー モデルなどのマルチスレッド コラボレーション シナリオでよく使用されます。

public class ProducerConsumerExample {
    private LinkedList<Integer> buffer = new LinkedList<>();
    private final int MAX_SIZE = 10;
    
    public synchronized void produce() {
        while (buffer.size() == MAX_SIZE) {
            try {
                wait(); // 缓冲区已满,生产者线程等待
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        buffer.add(1);
        notifyAll(); // 唤醒等待的消费者线程
    }
    
    public synchronized void consume() {
        while (buffer.size() == 0) {
            try {
                wait(); // 缓冲区为空,消费者线程等待
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        buffer.removeFirst();
        notifyAll(); // 唤醒等待的生产者线程
    }
}

上の例では、バッファがいっぱいになると、コンシューマ スレッドがバッファ内のコンテンツを消費するまで、プロデューサー スレッドは待機状態に入ります。プロデューサーのスレッドを上げます。バッファが空の場合、コンシューマ スレッドは、プロデューサ スレッドが新しい要素を生成してコンシューマ スレッドをウェイクアップするまで待機状態になります。

概要: wait メソッドと Notice メソッドは、Java でのスレッドのコラボレーションと通信のための重要なツールです。これらはマルチスレッド プログラミングにおいて重要な役割を果たします。 wait メソッドとnotify メソッドを適切に使用することで、スレッド間の洗練されたコラボレーションと通信を実現できます。

以上がJava のオブジェクト メソッドの詳細な分析: 待機と通知の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)