synchronized 锁类
时间: 2023-12-07 20:46:58 浏览: 31
synchronized 是 Java 中用于实现线程同步的关键字。在多线程环境下,synchronized 可以保证共享资源的安全访问,避免竞态条件和数据不一致的问题。
除了可以使用 synchronized 关键字来修饰方法和代码块外,还可以使用 synchronized 锁类来实现更细粒度的同步。
Java 中提供了两种类型的锁类:ReentrantLock 和 ReentrantReadWriteLock。
ReentrantLock 是一种可重入锁,它实现了 Lock 接口。使用 ReentrantLock 可以灵活地控制锁的获取和释放,并且可以支持公平和非公平的锁获取机制。
示例代码如下:
```
import java.util.concurrent.locks.ReentrantLock;
public class SynchronizedLockExample {
private ReentrantLock lock = new ReentrantLock();
public void doSomething() {
lock.lock();
try {
// 执行需要同步的操作
} finally {
lock.unlock();
}
}
}
```
ReentrantReadWriteLock 是一种读写锁,它实现了 ReadWriteLock 接口。读写锁允许多个线程同时读共享资源,但只允许一个线程写共享资源。这种锁适用于读多写少的场景,可以提高并发性能。
示例代码如下:
```
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class SynchronizedLockExample {
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public void readData() {
lock.readLock().lock();
try {
// 读取共享资源
} finally {
lock.readLock().unlock();
}
}
public void writeData() {
lock.writeLock().lock();
try {
// 写入共享资源
} finally {
lock.writeLock().unlock();
}
}
}
```
使用 synchronized 锁类可以更加灵活地控制线程同步,需要注意避免死锁和性能问题。在使用锁类时,需要确保正确地获取和释放锁,以保证线程安全和资源的合理利用。