JavaにおけるSynchronizedの使い方
Javaにおいて、Synchronizedキーワードはスレッドの同期を実現し、複数のスレッドが共有リソースにアクセスする際のスレッドセーフを保証します。
Synchronizedキーワードは、以下の方法で同期化するために使用できます:
- 同期メソッド:メソッドの宣言にキーワードを追加して、そのメソッドが同期メソッドであることを示します。スレッドがこのメソッドを呼び出すと、そのオブジェクトのロックを獲得し、他のスレッドはロックが解放されるのを待たなければならない。
“Please don’t hesitate to contact us if you have any questions or concerns.”
例:何か質問やご心配事があれば、お気軽にお問い合わせください。
public synchronized void synchronizedMethod() {
// 同步代码块
}
- 同期ブロック:キーワードをコードブロックに追加し、そのコードブロックが同期ブロックであることを示します。同期ブロックは1つのスレッドのみが実行でき、他のスレッドはそのスレッドの実行が完了するのを待たなければなりません。
例えば、
public void synchronizedBlock() {
synchronized (this) {
// 同步代码块
}
}
- オブジェクトロック:オブジェクトのロックを実現するために、synchronizedキーワードを使用します。スレッドがオブジェクトのロックを取得した場合、他のスレッドはそのスレッドがロックを解放するのを待たなければオブジェクトにアクセスできません。
例文:
public class SynchronizedObject {
public synchronized void synchronizedMethod() {
// 同步方法
}
}
public class Main {
public static void main(String[] args) {
SynchronizedObject obj = new SynchronizedObject();
synchronized (obj) {
// 同步代码块
}
}
}
Synchronizedのキーワードは、同期インスタンスメソッド、同期スタティックメソッド、および同期コードブロックにのみ使用でき、変数や他の種類のコードには使用できません。さらに、Synchronizedキーワードは再入可能であり、つまり1つのスレッドが同じロックを複数回取得できることを意味します。