有两种方法可以通过多个线程锁定共享资源。一个是重入锁(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) { //锁定一些资源 } } }