记录Synchronized和Lock的区别

Synchronized

1.它是JVM层面的,是一个Java关键字,底层通过monitor对象来完成相关方法,而wait/notify方法也都也都依赖于monitor对象来完成相应的功能。在monitor对象中,主要是由monitorentermonitorexit这两个方法来实现代码同步,其中exit方法一般会出现两次,一次是正常退出,第二次是强制执行退出,避免由于意外导致正常退出失效。2.Synchronized在执行完对应的代码后会自动释放锁,不需要开发人员手动去执行退出操作。
3.Synchronized不可中断,除非抛出异常或是内部的代码执行完毕
4.Synchronized属于非公平锁。
5.Synchronized不存在Condition这个对象,它若是执行唤醒线程,要么随机唤醒一个线程,要么全部唤醒。


Lock(ReentrantLock)

1.它属于API层面,Java5之后产生的类,它是存在于java.util.concurrent.locks包下的类。
2.Lock则需要开发人员手动控制锁的释放,若没有及时释放锁,可能会产生死锁的现象。
3.Lock则可以中断,例如超时方法tryLock(Long timeout, Timeunit unit)或者是调用interrupt()方法中断。
4.Lock可以是公平锁,也可以是非公平锁,默认为非公平锁。
5.Lock中有Condition对象,一个Lock中可以存在多个Condition对象,Condition对象可以执行await/signal两个方法,达到对需要唤醒的线程执行精确唤醒。

你可能感兴趣的:(记录Synchronized和Lock的区别)