【锁】

1、锁类型

  • jdk1.5之前
    1、内置锁
    2、volatile
  • jdk1.5
    1、ReentrantLock

2、区别

显式锁Lock

  • 无条件的(不需要有一个互斥对象)
  • 可轮询,由tryLock方法实现,可避免死锁,因为会释放锁
  • 定时的,由tryLock方法实现,可避免死锁,因为会释放锁
  • 可中断的,在try-finally加锁模式
  • 内置锁获取锁和释放锁操作都在同一个代码块,而显式锁不用,更灵活
  • 公平性,线程按照请求的先后顺序来获取锁。
    非公平性有一定的优势。A获取锁,B等待锁,A释放锁,B被唤醒途中,C获取锁,C运行,C释放锁,B被唤醒完成,B获取锁。
    这样运行了3个线程。如果是公平的话,只运行两个线程

3、显式锁

private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final Lock r = lock.readLock();
private final Lock w = lock.writeLock();

public V put(K key, V value) {
w.lock();
try {
....
} finally {
  w.unlock();
  }
}

public V get(Object key) {
r.lock();
try {
....
} finally {
  r.unlock();
  }
}

这样避免了"读-写"和“写-写”冲突。读和读是共享的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容