Lock:
- 可以显示指定起始位置和终止位置,提高了可操作性
- 可中断的获取锁【lock.lockInterruptibly()】:当线程在等待获取锁时,如果调用interrupt(),则会抛出InterruptedException 中断锁等待
- 超时锁【tryLock(…)】:可以设定锁的等待超时时间(不设置时立即返回结果true/false),超时后,中断等待。
- Lock用的是乐观锁方式:所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作(Compare and Swap)。
- 公平锁机制:即对于多线程来说,公平锁会依赖线程进来的顺序,后进来的线程后获得锁。而非公平锁的意思就是后进来的锁也可以和前边等待锁的线程同时竞争锁资源。对于效率来讲,当然是非公平锁效率更高,因为公平锁还要判断是不是线程队列的第一个才会让线程获得锁。
- ReentrantLock里面的Condition应用,能够控制notify哪个线程,替代“等待/通知”
volatile boolean isProcess = false;
ReentrantLock lock = new ReentrantLock();
Condtion processReady = lock.newCondtion();
thread: run() {
lock.lock();
isProcess = true;
try {
while(!isProcessReady) { //isProcessReady 是另外一个线程的控制变量
processReady.await();//释放了lock,在此等待signal
}catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
lock.unlock();
isProcess = false;
}
}
}
}