ホームページ > Java > &#&チュートリアル > Java 関数の同期メソッドでスレッド セーフを実現するにはどうすればよいですか?

Java 関数の同期メソッドでスレッド セーフを実現するにはどうすればよいですか?

王林
リリース: 2024-05-02 14:00:02
オリジナル
558 人が閲覧しました

Java 関数は、同期メソッドを通じてスレッドの安全性を実現します。同期メソッドは synchronized キーワードを使用します。スレッドが同期メソッドを呼び出すときは、メソッド本体を実行する前に、そのメソッドが属するオブジェクトのロックを取得する必要があります。同じメソッドを呼び出そうとする他のスレッドは、最初のスレッドがロックを解放するまでブロックされます。

Java 函数的同步方法如何实现线程安全?

Java 関数の同期メソッドでスレッド セーフを実現する方法

マルチスレッド環境で、データの一貫性と整合性を確保するには、共有リソースを同期する必要があります。同期の目的は、1 つのスレッドだけが同時に共有リソースにアクセスできるようにすることです。 Java は、この機能を実装するための同期メソッドを提供します。

同期メソッド

Java のメソッドは、synchronized キーワードを使用して同期メソッドとして宣言できます。同期メソッドが呼び出されるとき、スレッドはメソッド本体を実行する前に、まずメソッドが属するオブジェクトのロックを取得する必要があります。別のスレッドが同じ同期メソッドを呼び出そうとすると、最初のスレッドがロックを解放するまでブロックされます。

次の例は、同期メソッドを使用して共有リソースを保護する方法を示しています:

public class Counter {
    private int count = 0;

    // 同步方法
    public synchronized void increment() {
        count++;
    }
}
ログイン後にコピー

increment() このメソッドは同期メソッドとして宣言されています。つまり、このメソッドを同時に実行できるのは 1 つのスレッドだけです。

実際的なケース

次のコードは、共有リソースを保護するために同期メソッドが使用される実際的なケースを示しています。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class ConcurrentCounterDemo {

    public static void main(String[] args) throws InterruptedException {
        // 创建一个共享资源
        Counter counter = new Counter();

        // 创建一个线程池
        ExecutorService executor = Executors.newFixedThreadPool(10);

        // 提交任务到线程池
        for (int i = 0; i < 1000; i++) {
            executor.submit(() -> counter.increment());
        }

        // 等待所有任务完成
        executor.shutdown();
        executor.awaitTermination(1, TimeUnit.MINUTES);

        // 打印计数
        System.out.println("最终计数:" + counter.count);
    }
}
ログイン後にコピー

この例では、 increment() メソッドは、共有の count 変数を同時にインクリメントするために使用されます。同期メソッドが使用されていない場合、異なるスレッドが count 変数を同時に変更する可能性があり、最終的なカウントが不正確になる可能性があります。同期メソッドを使用すると、同時に 1 つのスレッドだけが count 変数にアクセスできるようになり、データの一貫性と整合性が確保されます。

以上がJava 関数の同期メソッドでスレッド セーフを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート