1.给出锁的定义
锁就是实现了接口Lock的实例,它提供了比synchronized保留字更为弹性的锁操作
锁也能通过Condition对象支持等待/通知机制
2.当线程进入临界区(通过synchronized保留字控制),Lock对象与内置锁相比,最大的优势是什么
当线程进入临界区,较之内置锁,Lock对象最大的好处就是具备退出请求锁的能力
3.判断对错:当调用线程没有持有锁,ReentrantLock的unlock()方法会抛出IllegalMonitorStateException
对
4.如何获取和特定Lock实例一起使用的一个Condition实例
你可以调用Lock的Condition newCondition()方法获取与特定Lock实例相关联的Condition实例
5.判断对错:ReentrantReadWriteLock()创建一个用于公平顺序策略的ReentrantReadWriteLock实例
错
ReentrantReadWriteLock()创建一个不带有公平顺序策略的ReentrantReadWriteLock实例
6.给出StampedLock定义
JDK8引入的StampedLock是一种基于能力(capability-based)的锁,拥有3种控制读写访问的模式
它类似于ReentrantReadWriteLock的方式区分了互斥和非互斥的锁,还提供了ReentrantReadWriteLock锁不支持的乐观读
7.包java.util.concurrent.locks包含了类LockSupport,这个LockSupport类的意义何在
LockSupport的目的在于为创建锁以及其他同步类提供基本的线程阻塞原语
8.用一个等价类替换下面的ID类,这个类使用ReentrantLock替代了synchronized
public class ID {
private static int counter;
public static synchronized int getID() {
int temp = counter + 1;
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return counter = temp;
}
}
import java.util.concurrent.locks.ReentrantLock;
public class ID {
private static int counter;
private final static ReentrantLock lock = new ReentrantLock();
public static int getID() {
lock.lock();
try {
int temp = counter + 1;
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return counter = temp;
} finally {
lock.unlock();
}
}
}