Javaのマルチスレッドロックの使い方は何ですか?
Javaでは、複数スレッドのロックメカニズムを実装するために、synchronizedキーワードまたはReentrantLockクラスを使用することができます。
- synchronizedキーワードを使用する:
public class MyObject {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized void decrement() {
count--;
}
}
上記の例では、increment()メソッドとdecrement()メソッドにsynchronizedキーワードを使用しており、これによりこれらのメソッドを呼び出す際には、MyObjectオブジェクトがロックされ、同時にこれらのメソッドにアクセスできるスレッドは1つしかないことが確認されます。
- ReentrantLockクラスを使用する:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class MyObject {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public void decrement() {
lock.lock();
try {
count--;
} finally {
lock.unlock();
}
}
}
上記の例では、ReentrantLockクラスを使用してロックオブジェクトlockを作成し、increment()メソッドとdecrement()メソッドでlock()メソッドを使用してロックをかけ、unlock()メソッドを使用してロックを解除しています。これにより、ロックの取得と解放をより柔軟に制御できます。