java中的锁
时间: 2023-11-27 10:55:22 浏览: 39
在 Java 中,锁是一种同步机制,用于控制多个线程对共享资源的访问。Java 提供了两种类型的锁:内置锁和显式锁。
1. 内置锁
内置锁是 Java 对象提供的一种锁机制,也称为监视器锁。每个 Java 对象都有一个内置锁,可以使用 synchronized 关键字来获取该锁。当一个线程获得了某个对象的内置锁后,其他线程必须等待该线程释放锁后才能获取该锁并执行对应的同步代码块。
例如,下面的代码中的 synchronized(this) 就是使用了对象的内置锁:
```
public class MyCounter {
private int count;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
```
2. 显式锁
Java 还提供了一种更灵活的锁机制:显式锁。显式锁是通过 Lock 接口实现的,可以更细粒度地控制锁的获取和释放。显式锁需要手动获取和释放,因此需要注意使用方式,避免死锁等问题。
例如,下面的代码中就使用了显式锁:
```
public class MyCounter {
private int count;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
}
```
显式锁的使用方式相对于内置锁更加灵活,可以根据需要进行锁的获取和释放,但也需要注意避免死锁等问题。