标签:接口 一个 https interface 存在 readwrite ace 可重入锁 方法
一、Lock接口
1. Java5之后,JDK新增了Lock接口,实现锁的功能,与synchronized关键字类似
2. 源码
public interface Lock { void lock(); //获取锁 void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); // 释放锁 Condition newCondition(); }
二、ReentrantLock
1. 实现了Lock接口
2. 是synchronized的替代,ReentrantLock是Java语言层面实现的锁机制,synchronized是JVM层面实现的锁机制
3. 可重入锁:如果线程已经获取了锁,还能再获取一次,计数器加1;释放的时候,要释放两次,等计数器为0的时候,才真正释放
4. 公平锁:当一个线程释放锁之后,等待时间最长的线程会获得锁
5. 非公平锁:当一个线程释放锁之后,所有线程一起竞争锁,等待时间最长的线程不一定能获得锁
6. ReentrantLock默认的构造方法是非公平锁,但可以指定公平锁,
pubic ReentrantLock(){ sync = new NofairSync();//默认的构造方法是非公平锁 } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();//通过传入boolean类型的值确定到底是公平锁还是非公平锁 }
7. lock.lock()方法加锁,lock.unlock()方法释放锁,如果忘记释放,会死锁
三、ReentrantReadWriteLock读写锁
1. 自旋锁:当一个线程尝试获取锁,但是没有获取到时,会循环获取
2. 读写锁是一种特殊的自旋锁,把对共享资源的访问,分成了读锁和写锁
3. 适合读操作远远大于写操作的情况
4. 可以同时存在多个读锁
5. 同一时间只能有一个写锁
6. 读锁和写锁不能同时存在
7. 与ReentrantLock相比,多了ReadLock和WriteLock
参考:
https://www.jianshu.com/p/4358b1466ec9
https://www.cnblogs.com/wait-pigblog/p/9347023.html
https://www.cnblogs.com/wait-pigblog/p/9350569.html
Lock->ReentrantLock->ReentrantReadWriteLock简介
标签:接口 一个 https interface 存在 readwrite ace 可重入锁 方法
原文地址:https://www.cnblogs.com/june0816/p/11603770.html