用java实现不同锁之间的区别并给出代码
时间: 2024-03-20 11:43:20 浏览: 15
Java 中有多种锁,包括 synchronized 关键字、ReentrantLock、ReadWriteLock 等。它们之间的主要区别如下:
1. synchronized:是 Java 中最基本的锁,使用 synchronized 关键字来实现。它是非公平锁,即多个线程同时争抢锁时,没有先后顺序,而是由操作系统随机选择一个线程获取锁。synchronized 关键字可以修饰代码块或者方法,它的锁对象是对象实例。
2. ReentrantLock:是一个可重入锁,可以指定是公平锁还是非公平锁。ReentrantLock 提供了更多的灵活性,例如可以实现公平锁、可中断锁、限时锁等,同时它也比 synchronized 更加灵活。ReentrantLock 的锁对象是 Lock 接口的实例。
3. ReadWriteLock:读写锁,它区分读锁和写锁,多个线程同时读取数据时不会互斥,但是写操作会互斥。ReadWriteLock 的锁对象是 ReadWriteLock 接口的实例。
下面是一个简单的示例代码,用于演示这三种锁的使用:
```java
import java.util.concurrent.locks.*;
public class LockDemo {
private int count = 0;
private Lock lock = new ReentrantLock();
private ReadWriteLock rwLock = new ReentrantReadWriteLock();
private Lock readLock = rwLock.readLock();
private Lock writeLock = rwLock.writeLock();
public void incrementSync() {
synchronized (this) {
count++;
}
}
public void incrementReentrantLock() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public void read() {
readLock.lock();
try {
System.out.println("Read value: " + count);
} finally {
readLock.unlock();
}
}
public void write() {
writeLock.lock();
try {
count++;
System.out.println("Write value: " + count);
} finally {
writeLock.unlock();
}
}
}
```
在这个示例中,incrementSync 方法使用 synchronized 关键字实现锁,incrementReentrantLock 方法使用 ReentrantLock 实现锁,read 和 write 方法使用 ReadWriteLock 实现读写锁。这样就可以通过 LockDemo 类来演示这三种锁的使用。