有两种方法可以通过多个线程锁定共享资源。一个是重入锁(Or ReadWriteLock),另一个是通过使用Synchronized方法。
Java 5的Java并发包中提供了ReentrantLock类。
它是Lock接口的实现,根据java docs,Lock接口的实现提供了比使用同步方法可获得的操作更广泛的操作。
| 序号 | 键 | 重入锁 | 已同步 |
|---|---|---|---|
| 1 | 获取锁 | 可重入锁类提供lock()了通过线程获取共享资源锁的方法 | 您只需要编写synced关键字即可获取锁 |
| 2 | 释放锁 | 要释放锁,程序员必须调用unlock()方法 | 隐式完成 |
| 3 | 中断能力 | lockInterruptible()方法可用于中断线程 | 没有办法中断线程 |
| 4 | 公平 | 此类的构造方法具有公平参数。如果将其设置为true,则锁定将授予对等待时间最长的 *线程的访问权限 | 锁不保证任何特定的访问权限 |
| 5 | 锁释放顺序 | 锁可以以任何顺序释放 | 锁应以获得锁的顺序释放 |
public class ReentrantLockExample implements Runnable{
private Lock lock=new ReentrantLock();
@Override
public void run() {
try {
lock.lock()
//锁定一些资源
}
catch (InterruptedException e) {
e.printStackTrace();
}
finally {
lock.unlock();
}
}
}public class SynchronizedLockExample implements Runnable{
@Override
public void run() {
synchronized (resource) {
//锁定一些资源
}
}
}