Synchronize
Javaのマルチスレッド環境でスレッドセーフ(Thread-safe)な動作を実現するための機能
スレッドが同時に共有されるリソースにアクセスするとき
→スレッドの実行順序や同時実行による競合状態を制御するために使用
具体的な状況の例
Javaでは、複数のスレッドが同時に共有データにアクセスすることがある
複数のスレッドが同時にデータを変更しようとするとデータの整合性が損なわれたり、競合状態が発生したりすることがある
このような競合状態を防ぐために使用
synchronizeキーワードを使用
→メソッドやブロックをsynchronizedできる
- synchronizeされたメソッドやブロックは、同時に1つのスレッドしか実行不可
- スレッドがsynchronizedされた領域に入ると、他のスレッドはその領域の終了を待つことになる
例 Javaのsynchronize
public class Counter {
private int count;
public synchronized void increment() {
count++;
}
public synchronized void decrement() {
count--;
}
}
Counter クラスの increment() メソッドと decrement() メソッドは、キーワードによってsynchronizedされている
→複数のスレッドが同時に increment() や decrement() メソッドを呼び出しても、互いに干渉することなく正しくカウンターを操作できる