synchronized和reentrantlock
时间: 2023-06-04 15:04:22 浏览: 71
是什么?可以举例说明吗?
Synchronized和ReentrantLock都是Java中用于实现并发控制的机制。它们都可以保证在多线程访问资源的情况下实现同步。
Synchronized是Java中的关键字,它可以用来修饰代码块或方法,使得同一时刻只有一个线程可以执行被修饰的代码块或方法。当一个线程获取了锁,并执行了被锁保护的代码后,其他线程只能等待锁被释放才能继续执行。
ReentrantLock是Java中的一个类,它提供了比Synchronized更多的扩展功能。例如,ReentrantLock可以指定公平锁或非公平锁,可以使用tryLock方法尝试获得锁而不阻塞线程,还可以使用Condition接口实现更精细的线程同步。
一个简单的例子就是使用Synchronized关键字来保护一个资源,如:
```
public class MyResource {
private int count;
public synchronized void increment() {
count += 1;
}
}
```
这样,当多个线程调用increment方法时,只有一个线程能够执行该方法,而其他线程需要等待锁被释放才能执行。
另一种实现方式是使用ReentrantLock:
```
public class MyResource {
private int count;
private final ReentrantLock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count += 1;
} finally {
lock.unlock();
}
}
}
```
这样,在访问资源之前,线程需要先获取锁,然后执行相关的操作,最后释放锁。使用ReentrantLock可以更加灵活地控制锁的获取和释放,但需要注意避免死锁等问题。