java.util.concurrent.locks.Lock接口
简介
在多少线程的线程安全处理方式上大概分为
- synchronized
- lock
- synchronized介绍:JAVA的关键字;可给当前的方法加锁,使的线程在执行的排队
public void getTicks(){
synchronized (Object.class){
//加锁代码块
}
}
优缺点分析
- 操作相对简单,对简单的多线程业务比较方便
- 暴力加锁,加锁除非当前线程放开锁,或者线程死亡 由JVM释放,不然会一直拿着锁,
- 线程拿不到当前锁的状态,不知道哪个线程拿到了锁,
- 在进行IO操作时,一旦由于网络等原因,容易造成死锁
Lock实现代码锁
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}
Lock分为乐观锁和悲观锁
- 乐观锁 read锁,可以支持多线程同时获取
- 悲观锁 类似synchronized
优缺点
- Lock线程在拿到锁的时候,其他线程可以不断尝试获取锁,不会一直等待
- 可以设置超时时间,超出后抛出异常
- 支持乐观锁
在实际应用中建议使用Lock来进行安全操作
分布式锁
- zk锁
- redis/memcached缓存锁
- 可参考文章