对于synchronized 还没理解的可以先看看我之前写的这篇博客讲解synchronized 先对synchronized有一个初步了解:https://blog.csdn.net/dekulugu/article/details/108929818
一、synchronized 和Lock区别
知道了synchronized 和Lock,他们都是实现了多线程的加锁,那么我们就要明白什么时候适合什么锁。
区别如下:
- Lock是java的一个interface接口,而synchronized是Java中的关键字,synchronized是由JDK实现的,不需要程序员编写代码去控制加锁和释放;Lock的接口如下:
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
void unlock();
Condition newCondition();
}
- synchronized修饰的代码在执行异常时,jdk会自动释放线程占有的锁,不需要程序员去控制释放锁,因此不会导致死锁现象发生;但是,当Lock发生异常时,如果程序没有通过unLock()去释放锁,则很可能造成