ホームページ Java &#&チュートリアル Java 開発におけるスレッド間通信の問題に対処する方法

Java 開発におけるスレッド間通信の問題に対処する方法

Jun 29, 2023 pm 12:12 PM
セマフォ スレッド通信の問題 解決: モニター

マルチスレッド アプリケーションの構築に特に適したプログラミング言語である Java は、マルチコア プロセッサの利点を最大限に活用して、プログラムの同時実行性と効率を向上させることができます。ただし、マルチスレッド開発では、スレッド間の通信の問題が重要な課題になります。この記事では、スレッド間通信の問題に対処するための一般的な方法をいくつか紹介します。

  1. 共有変数

共有変数は、スレッド間通信の最も単純かつ最も一般的な方法の 1 つです。複数のスレッドは、共有変数にアクセスして変更することで情報を渡すことができます。ただし、スレッドは並列で実行されるため、競合状態が発生する可能性があります。競合状態を回避するには、ミューテックスを使用して共有変数へのアクセスを保護する必要があります。ミューテックス ロックは、synchronized キーワードまたは Lock インターフェイスを使用して Java で実装できます。

以下は、スレッド通信に共有変数を使用するサンプル コードです:

public class SharedVariableExample {
    private int sharedVar = 0;

    public synchronized void increment() {
        sharedVar++;
    }

    public synchronized int getSharedVar() {
        return sharedVar;
    }
}

public class MyThread extends Thread {
    private SharedVariableExample example;

    public MyThread(SharedVariableExample example) {
        this.example = example;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            example.increment();
        }
    }
}

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

        MyThread thread1 = new MyThread(example);
        MyThread thread2 = new MyThread(example);

        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("SharedVar: " + example.getSharedVar());
    }
}
ログイン後にコピー

上の例では、2 つのスレッドは、join() を通じて、それぞれ共有変数に対して 10 回のインクリメント操作を実行します。メソッドは、すべてのスレッドの実行が完了するのを待ち、共有変数の値を出力します。

  1. 待機/通知メカニズム

スレッド間通信に共有変数を使用する場合、スレッドが別のスレッドの結果を待つ必要がある場合は、待機を使用できます。 /notification メカニズム (待機/通知メカニズム)。スレッドが待機する必要がある場合、オブジェクトの wait() メソッドを呼び出してスレッドを待機状態にできます。特定の条件が満たされると、他のスレッドはオブジェクトの notify() メソッドを呼び出して、待機中のスレッドを起動します。

以下は、スレッド通信に待機/通知メカニズムを使用するサンプル コードです。

public class WaitNotifyExample {
    private boolean flag = false;

    public synchronized void waitForSignal() {
        while (!flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        flag = false;
        System.out.println("Received signal");
    }

    public synchronized void sendSignal() {
        flag = true;
        notify();
    }
}

public class WaitThread extends Thread {
    private WaitNotifyExample example;

    public WaitThread(WaitNotifyExample example) {
        this.example = example;
    }

    public void run() {
        example.waitForSignal();
    }
}

public class NotifyThread extends Thread {
    private WaitNotifyExample example;

    public NotifyThread(WaitNotifyExample example) {
        this.example = example;
    }

    public void run() {
        example.sendSignal();
    }
}

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

        WaitThread waitThread = new WaitThread(example);
        NotifyThread notifyThread = new NotifyThread(example);

        waitThread.start();

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

        notifyThread.start();

        try {
            waitThread.join();
            notifyThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

上の例では、WaitThread スレッドはシグナルの受信を待機し、NotifyThread スレッドはシグナルの受信を待機します。 sleep() を通じてシグナルを送信します。メソッドは一定時間待機してから、待機中のスレッドを起動します。

  1. ブロッキング キュー

ブロッキング キューは、スレッド間の通信を実現する効率的な方法です。 put() メソッドと take() メソッドが提供されており、キューがいっぱいまたは空の場合に、条件が満たされるまで自動的にブロックして待機できます。

以下は、スレッド通信にブロッキング キューを使用するサンプル コードです:

import java.util.concurrent.ArrayBlockingQueue;
ログイン後にコピー

以上がJava 開発におけるスレッド間通信の問題に対処する方法の詳細内容です。詳細については、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でisoファイルのダウンロードが遅い問題を解決する方法 win11でisoファイルのダウンロードが遅い問題を解決する方法 Dec 24, 2023 pm 12:01 PM

win11 公式サイトから win11 iso ファイルをダウンロードする場合、Microsoft のサービスによりダウンロード速度が遅すぎる可能性があるため、この問題を解決するためにこのサイトから直接ダウンロードすることをお勧めします。 Win11 の ISO ファイルのダウンロードが遅すぎる場合の解決策: 1. 主に Microsoft サーバーが原因で、Win11 の ISO ファイルのダウンロードが遅すぎます。 2. Microsoft は中国にサーバーを持たないため、ネットワーク速度が遅くなり、不安定になる可能性があります。 3. さらに、これは客観的な要因であり、解決する方法はないため、ダウンロードが遅くなるのを待つしかありません。 4. 速度を上げたい場合は、実際にはこのサイトから win11 システム ISO を直接ダウンロードできます。 5. このサイトには Microsoft の公式 Web サイトのような問題はなく、インターネット速度を最大限に高めることができ、間もなく利用可能になります。

Windows 11 セキュリティ センターを開けない場合はどうすればよいですか?解決策: 別のアプリを選択してください Windows 11 セキュリティ センターを開けない場合はどうすればよいですか?解決策: 別のアプリを選択してください Dec 30, 2023 pm 03:08 PM

一部のユーザーは、Win11 セキュリティ センターを開こうとしていますが、Win11 セキュリティ センターでポップアップ アプリケーションの選択を開くことができないという問題が発生しました。どうすればよいかわかりません。これは、Win11 セキュリティ センターのブート パスのエラーが原因である可能性があります。私たちのアプリケーション. Windows ターミナルを使用するだけです にコマンドを入力することで解決できます。 Win11 セキュリティ センターはポップアップ アプリケーションを開けません。選択します。 1. 下部のスタート メニューを右クリックし、「Windows ターミナル (管理者)」を開きます。 2. 「Set-ExecutionPolicyUnrestricted」と入力し、Enter キーを押して実行します。アイコン プロンプトがポップアップ表示されます。 「A」を入力して Enter キーを押します。 3. 次に「Get-AppXPackage-AllUsers|Forea」と入力します。

golang エラーの解決: 無効な受信者のタイプ 'x' ('x' は定義されたタイプではありません)、解決策 golang エラーの解決: 無効な受信者のタイプ 'x' ('x' は定義されたタイプではありません)、解決策 Aug 26, 2023 am 10:31 AM

Golang エラーを解決する:invalidreceivertype'x'('x'isnotadefinedtype)、解決策 Golang プログラミングを使用する過程で、さまざまなエラーに遭遇することがよくあります。よくあるエラーの 1 つは、「invalidreceivertype'x'('x'isnotadependenttype)」です。このエラー メッセージは、宣言していることを意味します。

Win11 で Billions of Zombies ゲームを実行できない理由と解決策 Win11 で Billions of Zombies ゲームを実行できない理由と解決策 Jan 02, 2024 pm 11:29 PM

一部のプレイヤーは、Win11 システムで Billions of Zombies をプレイしたいと思っていますが、プレイしたりゲームに参加したりできないことに気づきました。これは比較的新しいゲームであるため、互換性の問題が発生する可能性は低くなりますが、いくつかのコンポーネントが不足しているためである可能性があり、修復ツールを使用して修復できます。 win11 で Billions of Zombies をプレイできないのはなぜですか: 方法 1: 1. 一般に、コンポーネントが欠落している場合は、ゲームを開いたときにポップアップ表示されるプロンプトを通じて、どのコンポーネントが欠落しているかを判断できます。 2. ただし、不足しているアイテムが多すぎる場合は、すべてが表示されないため、修復ツールを直接使用して全体を修復してみることができます。 3. まず右側のリンクをクリックして、DirectX 修復ツールをダウンロードします。 4. ダウンロードとインストールが完了したら、ソフトウェアを開き、「検出と修復」を選択します。 5. その後、

Win7 システムの純正バージョンに USB ドライバーがない場合はどうすればよいですか? Win7 システムの純正バージョンに USB ドライバーがない場合はどうすればよいですか? Jul 07, 2023 pm 09:37 PM

新しくインストールした純正バージョンの win7 システムには USB ドライバーがありません。どうすればよいですか?デバイス マネージャーにアクセスしてドライバーを更新することも、ドライバー管理ソフトウェアを使用してドライバーをインストールすることもできます。win7 システム USB ドライバーの純粋なバージョンをインストールする方法を見てみましょう。 1. まずドライバー管理ソフトウェアを使用してドライバーをスキャンしてインストールしますが、インストール後も動作しない場合は、コントロール パネルに入る必要があります。 2. コントロール パネルで、[ハードウェア サウンド] をクリックし、[デバイス マネージャー] を選択します。 3. デバイス マネージャー ページに入り、USB コントロール オプションを見つけます。 4. [USB] オプションをクリックした後、感嘆符と疑問符が表示される USB ドライバーを見つけます。 5. 次に、「ドライバーの更新」を右クリックします。 6. コンピュータがすでにインターネットに接続されている場合は、オンラインに接続できます

Windows 10 起動時にパスワード入力時に黒い画面が表示される場合の解決策 Windows 10 起動時にパスワード入力時に黒い画面が表示される場合の解決策 Jul 10, 2023 pm 10:49 PM

コンピューター システムを Windows 10 にアップグレードすると、多くの新機能が利用できるようになりますが、奇妙な問題が発生する場合もあります。たとえば、一部のユーザーは、ラップトップは正常に使用できたが、翌日電源を入れたときにパスワードを入力した後、突然画面が真っ暗になったと報告しました。何をするか?以下では、この問題の具体的な解決策を見てみましょう。 1. ラップトップの電源を入れ、パワーオン パスワードを入力します。画面が真っ暗になります。 2. この時点で、「Ctrl+Alt+Del」キーの組み合わせを押してタスク マネージャーを開きます。 3. 開いたタスク マネージャーで, 「ファイル---新しいタスクの実行」オプションをクリックし、「explorer.exe」コマンドを入力して「OK」をクリックします; 4. この時点でデスクトップに入ります。黒い画面の問題を完全に解決するには、「開始」をクリックします。

Java ファイルアップロードサイズ制限エラー例外 (FileUploadSizeLimitExceededErrorExceotion) を解決する方法 Java ファイルアップロードサイズ制限エラー例外 (FileUploadSizeLimitExceededErrorExceotion) を解決する方法 Aug 19, 2023 pm 09:51 PM

Java ファイルのアップロード サイズ制限エラー例外 (FileUploadSizeLimitExceededErrorExceotion) を解決する方法 Web 開発では、ファイルのアップロードは一般的な機能要件です。ただし、Java のファイル アップロード機能には、デフォルトでファイル サイズ制限があります。アップロードされたファイルのサイズが制限を超えると、FileUploadSizeLimitExceededErrorExceotion 例外がスローされます。本

0x0000007bエラーの解決方法 0x0000007bエラーの解決方法 Dec 25, 2023 pm 03:35 PM

多くの友人がコンピューターを使用しているときに0x0000007bエラーコードに遭遇しましたが、このような状況を解決するにはどうすればよいですか?この問題は、ハードディスクのモードを変更するか、設定をリセットすることで解決できます。以下の解決策を見てみましょう。 0x0000007b が表示された場合の対処方法: 方法 1: 1. 間違ったグラフィック カード ドライバーが更新されている可能性があります。エラー コードが表示されたら、コンピューターを再起動します。 2. 次に、「F8」を押してセーフモード選択インターフェイスに入り、「前回正常起​​動時の構成」を選択してシステムに入ります。 3. これでアプリケーションの競合問題は解決できますが、解決できない場合は、ハードディスクの起動モードを変更してみてください。方法 2: 1. まずコンピュータを再起動し、ホットキーを使用して「b」と入力します。

See all articles