Javaでオブジェクトをロックする
Javaではsynchronizedキーワードで同期のロックが可能です。同期ロックの手法には以下のものがあります。
- 同期を取って
public synchronized void method(){
//需要同步的代码
}
- 調和した
public static synchronized void method(){
//需要同步的代码
}
- 同期的
public void method(){
synchronized (obj) { // obj为任意对象
// 需要同步的代码
}
}
同期ロックは、同一スレッドが同期コードブロックを実行しているときにのみ、他のスレッドがブロックされてロックが解放されるのを待つことを保証します。同期ロックのロックとロックの解放は自動的に行われ、手動制御は必要ありません。
また、ReentrantLockクラスを使用して同期ロックを実装することもできます。これにより、再入可能なロック、割り込み可能なロック、公正なロックなどの、より柔軟な同期ロック制御が可能になります。ReentrantLockを使用する場合は、手動でロックの付与と解除操作を行う必要があります。
import java.util.concurrent.locks.ReentrantLock;
private ReentrantLock lock = new ReentrantLock();
public void method(){
lock.lock(); // 加锁
try {
// 需要同步的代码
} finally {
lock.unlock(); // 释放锁
}
}