Java显式锁——相对于synchronized
1.Lock接口和核心方法
- 【Java显式锁——相对于synchronized】Lock接口和synchronized的比较
synchronized :代码简洁
Lock:获取锁可以被中断,超时获取锁,尝试获取锁,读多写少用读写锁
- 可重入锁ReentrantLock(递归)
使用锁的范式
public class LockDemo {private Lock lock= new ReentrantLock();
private int count;
//使用显式锁Lock
public void increament() {
lock.lock();
try {
count++;
}finally {
lock.unlock();
}
}//对比synchronized内置锁
public synchronized void incr2() {
count++;
}
}
- 所谓锁的公平和非公平
如果在时间上,先对锁进行获取的请求,一定先被满足,这个锁就是公平的,不满足,就是非公平的
非公平的效率一般来讲更高 - 问题:为什么非公平锁更高效?(后面的线程可以插队直接来获取锁,而不是唤醒阻塞的线程来获取锁)
- ReadWriteLock接口和读写锁ReentrantReadWriteLock
- 问题:读写锁是怎样实现的?
- ReentrantLock和Syn关键字,都是排他锁
读写锁:同一时刻允许多个读线程同时访问,但是写线程访问的时候,所有的读和写都被阻塞,最适宜与读多写少的情况
读写商品信息示例(读/写比例为10)
使用读写锁 UseRwLock.java
对比 使用synchronized UseSyn.java
- 用Lock和Condition实现等待通知(一个锁可以有多个condition)
快递通知 使用Condition - 问题:读写锁是怎样实现的?
- 问题:一个锁可以有多个condition,相较于一个锁对应一个condition,对性能是否有影响?
- 问题:对比wait/notifyAll
wait尽量使用notifyAll,Condition尽量使用signal。
快递通知 使用wait/notifyAll
- 1)享学课堂Mark老师笔记
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机