Lock是一个接口,只能手动的获取和释放锁,属于Java语法层面的锁,解决了synchronized的缺点
。
注意 使用lock.lock()后,应将lock.unlock();放在finally中;
public void add(){
lock.lock();
try{
count++;
}finally{
lock.unlock();
}
}
允许一个线程反复多次的去拿同一把锁。 递归调用的时候,防止一个线程自己把自己锁死。
性能上非公平锁比公平锁性能更好,因为如果是公平锁,线程拿不到锁会挂起,而线程挂起导致的上下文切换会浪费时间周期。