Javaのsynchronizedキーワードの基本原理は何ですか。

Javaの`synchronized`キーワードはスレッド同期機構を実現するために使用されます。メソッドやコードブロックに適用することができ、`synchronized`修飾されたメソッドやコードブロックには同時に1つのスレッドしか入ることができないため、スレッドセーフを確保します。

The basic principle is as follows: 底層の原理は以下の通りです。

  1. synchronizedキーワードはオブジェクトのロックメカニズムに基づいています。各オブジェクトにはそれに関連付けられたロックがあり、スレッドがsynchronized修飾されたメソッドやコードブロックに入るとき、まずオブジェクトのロックを取得しようとします。
  2. ロックを獲得すれば、スレッドはクリティカルセクションに入り、コードを実行します。実行が完了したら、ロックを解放し、他のロックを待っているスレッドは引き続き実行できます。
  3. ロックを取得できない場合、スレッドはブロック状態となり、ロックを保持しているスレッドがロックを解放するまで待機し、その後ブロックされたスレッドが再びロックの取得を試みます。
  4. 一つのスレッドがロックを取得した場合、他のスレッドはそのロックを取得することができず、待たなければならない。

Javaでは、各オブジェクトには監視ロック(または組み込みロック、排他ロックとも呼ばれる)があります。スレッドがsynchronized修飾されたメソッドやコードブロックに入ると、オブジェクトの監視ロックを取得しようとします。

スレッドがロックを取得すると、他のスレッドはそのロックを取得できず、待たなければなりません。スレッドがsynchronized修飾されたメソッドまたはコードブロックを実行し終えると、ロックが解放され、他のスレッドは引き続きロックを取得しようとすることができます。

注意すべき点は、synchronizedキーワードのロックの粒度がオブジェクトレベルであることです。つまり、あるオブジェクトのメソッドがsynchronized修飾されている場合、他のスレッドは同時にそのオブジェクトの他のsynchronized修飾されたメソッドを呼び出すことができません。ただし、異なるオブジェクトのメソッドを複数のスレッドが呼び出す場合、それらは相互にブロックされません。

bannerAds