ホームページ Java &#&チュートリアル Java の wait と notification を深く理解する: スレッド同期メカニズムの分析

Java の wait と notification を深く理解する: スレッド同期メカニズムの分析

Dec 20, 2023 am 08:44 AM
同期する 通知する 待って

Java の wait と notification を深く理解する: スレッド同期メカニズムの分析

Java でのスレッド同期: 待機メソッドと通知メソッドの動作原理の分析

Java マルチスレッド プログラミングでは、スレッド間の同期は非常に重要な概念です。実際の開発では、複数のスレッド間の実行順序やリソース アクセスを制御する必要があることがよくあります。スレッドの同期を実現するために、Java には wait メソッドと notification メソッドが用意されています。

wait メソッドと Notice メソッドは、Object クラスの 2 つのメソッドで、Java の監視 (モニター) メカニズムを使用して、スレッド間の調整と通信を実現します。スレッドが特定の条件を待っているとき、オブジェクトの wait メソッドを呼び出すことができ、スレッドは待機状態に入り、オブジェクトのロックを解放します。他のスレッドがオブジェクトの状態を変更すると、オブジェクトの通知メソッドを呼び出して待機中のスレッドに通知することができ、スレッドは再度ロックを競合して実行を継続できるようになります。

待機メソッドと通知メソッドの主な動作原理は次のとおりです。

  1. 待機メソッドの機能は、特定の条件が満たされるまで現在のスレッドを待機状態にすることです。会った。 wait メソッドを呼び出す前に、スレッドはオブジェクトのロックを取得する必要があります。取得していない場合は、IllegalMonitorStateException がスローされます。スレッドが待機状態に入ると、オブジェクトのロックを解放し、待機キューに入ります。待機中のスレッドは、他のスレッドが対応するオブジェクトのnotifyメソッドまたはnotifyAllメソッドを呼び出した場合にのみ起動できます。
  2. 通知メソッドは、待機キュー内のスレッドをウェイクアップして、ロックを取得して実行を続行するために再競合できるようにします。待機キューに複数のスレッドがある場合、どのスレッドが起動されるかは未定義であり、オペレーティング システムのスケジューリング ポリシーによって異なります。通知メソッドは 1 つのスレッドのみを起動しますが、notifyAll メソッドは待機中のすべてのスレッドを起動することに注意してください。

待機メソッドと通知メソッドの使用を示すサンプル コードを以下に示します。

public class WaitNotifyDemo {
    private static final Object lock = new Object();
    private static boolean flag = false;

    public static void main(String[] args) {
        Thread waitThread = new Thread(new WaitTask());
        Thread notifyThread = new Thread(new NotifyTask());

        waitThread.start();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        notifyThread.start();
    }

    static class WaitTask implements Runnable {
        @Override
        public void run() {
            synchronized (lock) {
                while (!flag) {
                    try {
                        System.out.println("等待线程进入等待状态");
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("等待线程被唤醒,继续执行");
            }
        }
    }

    static class NotifyTask implements Runnable {
        @Override
        public void run() {
            synchronized (lock) {
                System.out.println("通知线程唤醒等待线程");
                lock.notify();
                flag = true;
            }
        }
    }
}
ログイン後にコピー

上の例では、waitThread が最初に実行を開始し、同期に入ろうとしたときに、 blockでは、flagの初期値がfalseなので、waitメソッドを呼び出して待ち状態になります。その後、notifyThread が開始され、2 秒間スリープした後、ロックを取得し、flag の値を true に設定し、notify メソッドを呼び出して待機中のスレッドを起動します。最終的には、waitThread が起動され、wait メソッドの次の場所から実行が続行されます。

この例を通じて、wait メソッドと notification メソッドがどのように機能するかをよりよく理解できます。これらはスレッド間の同期と通信のための重要なツールであり、スレッド間の競合やリソース アクセスの問題を効果的に解決します。実際のアプリケーションでは、待機メソッドと通知メソッドを適切に使用することで、複数のスレッド間のスムーズな連携を確保できます。

以上がJava の wait と notification を深く理解する: スレッド同期メカニズムの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

win11でヘッドフォンとスピーカーを同時に再生する問題を解決する win11でヘッドフォンとスピーカーを同時に再生する問題を解決する Jan 06, 2024 am 08:50 AM

一般的に、同時に使用する必要があるのはヘッドフォンまたはスピーカーのいずれか 1 つだけですが、Win11 システムでヘッドフォンとスピーカーが同時に鳴るという問題が発生したと友人が報告しています。 Realtek パネルでオフにすれば問題ありません。以下を見てみましょう。 win11 でヘッドフォンとスピーカーが一緒に聞こえる場合はどうすればよいですか? 1. まず、デスクトップで「コントロール パネル」を見つけて開きます。 2. コントロール パネルに入り、「ハードウェアとサウンド」を見つけて開きます。 3. 次に、「」を見つけます。 Realtek High Definition" とスピーカーのアイコン。オーディオマネージャー" 4. [スピーカー] を選択し、[リアパネル] をクリックしてスピーカー設定に入ります。 5. 開くとデバイスの種類が表示されるので、ヘッドフォンをオフにしたい場合は、「ヘッドフォン」のチェックを外します。

同期したフォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しません 同期したフォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しません Mar 18, 2024 am 09:46 AM

同期フォルダー内の 1 つ以上のアイテムが Outlook のエラー メッセージと一致しない場合は、会議アイテムを更新またはキャンセルしたことが原因である可能性があります。この場合、ローカル バージョンのデータがリモート コピーと競合していることを示すエラー メッセージが表示されます。この状況は通常、Outlook デスクトップ アプリケーションで発生します。同期したフォルダー内の 1 つ以上のアイテムが一致しません。競合を解決するには、プロジェクトを開いて操作を再試行します。同期フォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しない問題を修正する Outlook デスクトップ バージョンでは、ローカルの予定表アイテムがサーバー コピーと競合すると問題が発生する可能性があります。ただし幸いなことに、それを助ける簡単な方法がいくつかあります

iPhoneの通知を消去する方法 iPhoneの通知を消去する方法 Feb 15, 2024 pm 06:10 PM

通知は iPhone で最も強力なスイートではありませんが、最近の iOS アップデートで、Apple は通知の表示方法を微調整しました。新しい iOS バージョンでは、ユーザーのエクスペリエンスを向上させるために、通知センターを介したアラートの表示が最小限に抑えられています。この記事では、さまざまな方法で iPhone の通知を消去するのに役立ちます。 iPhone で受信通知バナーをオフにする方法 ホーム画面にいるとき、またはアプリをアクティブに使用しているときは、この機能を無効にしない限り、すべての通知が上部にバナーとして表示されます。現在のタスクを中断せずに後で通知を確認したい場合は、バナーを上にスワイプして通知を閉じます。これにより、受信した通知が通知センターに移動され、次のことが可能になります。

PHP は電子メールを非同期に送信します。電子メールの送信を長時間待つ必要がなくなります。 PHP は電子メールを非同期に送信します。電子メールの送信を長時間待つ必要がなくなります。 Sep 19, 2023 am 09:10 AM

PHP は電子メールを非同期に送信します。電子メールの送信を長時間待つ必要がなくなります。はじめに: Web 開発では、電子メールの送信は一般的な機能の 1 つです。しかし、メールの送信にはサーバーとの通信が必要となるため、ユーザーはメールの送信を待つ間、長時間待たされてしまうことがよくあります。この問題を解決するには、PHP を使用して電子メールを非同期に送信し、ユーザー エクスペリエンスを最適化します。この記事では、具体的なコード例を通じてメールを非同期に送信し、長時間の待ち時間を回避するための PHP の実装方法を紹介します。 1. メールの非同期送信について理解する

Windows 11 ユーザー ガイド: 広告ポップアップを無効にする方法 Windows 11 ユーザー ガイド: 広告ポップアップを無効にする方法 Sep 22, 2023 pm 07:21 PM

Microsoft の Windows 11 オペレーティング システムでは、通知システムを使用してコンピュータ上に提案がポップアップとして定期的に表示される場合があります。この提案システムは、もともと Windows 11 のワークフローを改善するためのヒントや提案をユーザーに提供するために設計されましたが、現在ではほぼ完全に Microsoft のサービスと製品を宣伝する広告システムに変わりました。提案ポップアップでは、Microsoft 365 サブスクリプションをユーザーに宣伝したり、Android スマートフォンをデバイスにリンクしたり、バックアップ ソリューションをセットアップしたりすることを提案する場合があります。これらのポップアップが煩わしい場合は、システムを調整して完全に無効にすることができます。次のガイドでは、Microsoft の Windows 11 オペレーティング システムを実行しているデバイスでポップアップを無効にするための推奨事項を示します。

iPhone で Apple TV キーボードのリマインダーをオフにする方法 iPhone で Apple TV キーボードのリマインダーをオフにする方法 Nov 30, 2023 pm 11:41 PM

AppleTV では、AppleTV Remote を使用してテキストを入力したくない場合は、近くにある iPhone または iPad を使用して入力できます。 AppleTV にテキストフィールドが表示されると、iPhone または iPad に通知が表示され、通知をタップした後、iOS デバイスのスクリーンキーボードを使用して AppleTV にテキストを入力できます。これらの通知が煩わしいと感じる場合は、iPhone または iPad で通知を無効にすることができます (家に AppleTV が数台あり、子供がいる場合は、その意味がわかるでしょう)。 iOS/iPadOS 15.1 以降を実行している場合、それらを無効にする方法は次のとおりです。 iPhone または iPad で起動する

Web サイトをスタンドアロンの Mac アプリに変換する方法 Web サイトをスタンドアロンの Mac アプリに変換する方法 Oct 12, 2023 pm 11:17 PM

macOS Sonoma および Safari 17 では、Web サイトを「Web アプリ」に変換できます。Web アプリは Mac のドックに常駐し、ブラウザーを開かずに他のアプリと同様にアクセスできます。それがどのように機能するかを学び続けてください。 Apple の Safari ブラウザの新しいオプションのおかげで、頻繁にアクセスするインターネット上の Web サイトを、Mac のドックに常駐していつでもアクセスできるスタンドアロンの「Web アプリ」に変えることができるようになりました。この Web アプリは、他のアプリと同様に Mission Control および Stage Manager で動作し、Launchpad または SpotlightSearch 経由で開くこともできます。あらゆるウェブサイトを次のようなものに変える方法

win10 クリップボードと携帯電話を同期する方法を説明します win10 クリップボードと携帯電話を同期する方法を説明します Jan 06, 2024 am 09:18 AM

win10 クリップボードの非常に便利な機能は、クロスデバイス クラウド ストレージ機能です。これは非常に便利で、ユーザーが PC デバイスとモバイル デバイスで同時にコピー アンド ペーストするのに役立ちます。設定方法は非常に簡単で、システム内のクリップボードに設定するだけです。 win10 クリップボードを携帯電話に同期する 1. まず、左下隅の [スタート] をクリックして設定を入力します。 2. 次に「システム」をクリックします。 3. 左側の「クリップボード」を選択します。 4. 最後に、右側の「デバイス間同期」で「ログイン」をクリックし、携帯電話を選択します。

See all articles