带你搞懂Java多线程(一)
带你搞懂Java多线程(二)
带你搞懂Java多线程(三)
带你搞懂Java多线程(四)
synchronized的缺点
- 获取synchronized关键字的锁不能中断
- 没有尝试获取锁的机制
Lock接口和核心方法
Lock(显示锁)
Lock是一个接口,只能手动的获取和释放锁,属于Java语法层面的锁,解决了synchronized的缺点
。
注意 使用lock.lock()后,应将lock.unlock();放在finally中;
public void add(){
lock.lock();
try{
count++;
}finally{
lock.unlock();
}
}
可重入锁ReentrantLock
允许一个线程反复多次的去拿同一把锁。
递归调用的时候,防止一个线程自己把自己锁死。
锁的公平和非公平
- 公平锁,当多个线程申请同一把锁的时候,先申请的先拿到。
- 非公平锁,当多个线程申请同一把锁的时候,可能后申请的反而先拿到锁。
哪个更好
性能上非公平锁比公平锁性能更好,因为如果是公平锁,线程拿不到锁会挂起,而线程挂起导致的上下文切换会浪费时间周期。
网友评论