之前我也总结过相关的博客,今天由于系统学习再一次总结一遍。
Lock跟Synchronized可以让线程安全的措施,通过lock获得锁。unlock解除锁。
在文中有一个概念:自旋锁
自旋锁:一个线程在获取锁的时候,如果被其他线程获取锁了,它会循环等待,直到获得锁。
public class Counter{
public class Lock{
private boolean isLocked = false;
public synchronized void lock()
throws InterruptedException{
while(isLocked){
wait();
}
isLocked = true;
}
public synchronized void unlock(){
isLocked = false;
notify();
}
}
wait是让线程等待,notify唤醒线程,上面就是自旋锁。
其次Synchronized是可重入锁,什么意思,就是在同个管道的的两个同步方法可以互相进入,不向lock会wait去等待。
最后如果使用Lock的话,要在finally进行unlock操作,即使报错跳出也会释放锁。