ホームページ  >  記事  >  Java  >  Java並列プログラミングにおけるsynchronizedキーワードの使用法と原理

Java並列プログラミングにおけるsynchronizedキーワードの使用法と原理

WBOY
WBOYオリジナル
2024-04-18 13:21:011158ブラウズ

Java の synchronized キーワードは、複数のスレッドが共有リソースに同時にアクセスすることによって引き起こされるデータ競合を防ぐために、オブジェクト ロックを取得することによって同期を実現します。その使用法には同期メソッドと同期コード ブロックが含まれており、これは現在のオブジェクトを表します。

Java並列プログラミングにおけるsynchronizedキーワードの使用法と原理

Java 並列プログラミングの synchronized キーワード

原則

synchronizedキーワードは同期ペアの共有に使用されますリソース アクセスにより、複数のスレッドが同じリソースに同時にアクセスすることによって引き起こされるデータ競合の問題が防止されます。ロック(monitor)を取得することで同期を実現します。スレッドがロックを取得すると、他のスレッドは実行を続行する前に、ロックが解放されるまで待つ必要があります。

ロックはオブジェクトに関連付けられます。スレッドがオブジェクトをロックすると、他のスレッドはそのオブジェクトをロックできなくなります。

使用方法

synchronized 使用方法は次の 2 つがあります。

  1. Synchronized 方式
public synchronized void myMethod() {
    // 同步代码块
}
  1. 同期されたコード ブロック
public void myMethod() {
    synchronized (this) {
        // 同步代码块
    }
}

このうち、this は現在のオブジェクトを表します。

実践的なケース

以下はスレッドアンセーフなカウンタークラスです:

public class UnsafeCounter {
    private int count = 0;

    public void increment() {
        count++;
    }
}

複数のスレッドが同時に increment() メソッドを呼び出した場合場合、count 値が不正確になる可能性があります。この問題を解決するには、synchronized を使用して increment() メソッドを同期できます。

public class SafeCounter {
    private int count = 0;

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

これで、複数のスレッドが increment()## を安全に呼び出すことができるようになりました。 # メソッドは synchronized キーワードによって保護されているためです。

以上がJava並列プログラミングにおけるsynchronizedキーワードの使用法と原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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