Java の synchronized キーワードは、複数のスレッドが共有リソースに同時にアクセスすることによって引き起こされるデータ競合を防ぐために、オブジェクト ロックを取得することによって同期を実現します。その使用法には同期メソッドと同期コード ブロックが含まれており、これは現在のオブジェクトを表します。
synchronized
キーワードは同期ペアの共有に使用されますリソース アクセスにより、複数のスレッドが同じリソースに同時にアクセスすることによって引き起こされるデータ競合の問題が防止されます。ロック(monitor
)を取得することで同期を実現します。スレッドがロックを取得すると、他のスレッドは実行を続行する前に、ロックが解放されるまで待つ必要があります。
ロックはオブジェクトに関連付けられます。スレッドがオブジェクトをロックすると、他のスレッドはそのオブジェクトをロックできなくなります。
synchronized
使用方法は次の 2 つがあります。
public synchronized void myMethod() { // 同步代码块 }
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 サイトの他の関連記事を参照してください。