synchronized的可重入和不可中断特性

2,359 阅读1分钟

可重入

一个线程可以多次执行synchronized,重复获取同一把锁。

可重入原理

synchronized的锁对象中有一个计数器(recursions变量)会记录线程获取几次锁

可重入的好处

1.可以避免死锁

2.可以让我们更好的封装代码

小结

synchronized是可重入锁,内部锁对象会有一个计数器记录线程获取几次锁啦,在执行完同步代码块时,计数器的数量会减1,直到计数器的数量为0,就释放这个锁。

不可中断

一个线程获得锁后,另一个线程想要获得锁,必须处于阻塞或等待状态,如果第一个线程不释放锁,第二个线程会一直处于阻塞或等待,不可被中断。

lock支持可中断和不可中断

lock.lock();不可中断

lock.tryLock(time, timeunit);可中断

小结

一个线程获得锁后,另一个线程想要获得锁,必须处于阻塞或等待状态,如果第一个线程不释放锁,第二个线程会一直处于阻塞或等待,不可被中断。 synchronized属于不可中断

Lock的lock方法是不可中断的

Lock的tryLock方法是可中断的