java悲观锁的实现方式是什么
在Java中,悲观锁的实现方式有两种:
- synchronized关键字:synchronized关键字可以用来修饰方法或代码块,当一个线程获得了对象的锁,其他想要访问该对象的线程就必须等待。synchronized关键字可以保证代码块的原子性操作,避免多个线程同时修改共享数据而引发的并发问题。
示例代码:
public class LockExample {
private int count = 0;
public synchronized void increment() {
count++;
}
}
- ReentrantLock类:ReentrantLock是Java提供的一个可重入锁(可多次获取同一个锁),可以通过lock()方法获取锁,并通过unlock()方法释放锁。ReentrantLock类提供了更多的灵活性和功能,例如可以设置公平性、可以中断等待的线程等。
示例代码:
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private int count = 0;
private ReentrantLock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}
这两种方式都是悲观锁的实现方式,因为它们都假设会出现并发冲突,因此在访问共享资源之前先获取锁,并阻塞其他线程的访问。与之相反,乐观锁则是假设不会出现并发冲突,直接进行操作,并在提交时检查是否有其他线程修改了数据。
相关问答