Lock是java5后出现的,是在juc包。
synchronized实现原理其实就是通过monitorenter和monitorexit去获得锁和释放锁实现的,后续的线程会同步等待,如果一个代码块被synchronized修饰,其他线程无法获取锁,只能依次等待,synchronized是非公平锁。
1.synchronized锁什么时候释放?
1.获取锁的线程执行完了该代码块,会调用monitorexit释放锁
2.线程执行出现异常
2.Lock是java实现的类,synchronized是java中的关键词
3.synchronized缺陷?
1.Lock可以主动释放锁
2.synchronized是被动的
4.Lock的实现?
1.ReadWriteLock,读可以使用readLock,写可以使用writeLock
2.ReentrankLock,可重入锁,当然synchronzied也是可重入锁
3.ReentrankReadWriteLock,可重入的读写锁
5.公平锁
1.synchronzied是非公平锁
2.ReentrankLock默认是非公平锁,可以设置为公平锁
6.如何选择?
基于锁的功能点,根据实际场景
性能上:如果对性能要求不高,都可以,如果高的话可使用Lock,java8对synchronized进行了很多的优化,有偏向锁、轻量级锁、重量级锁(偏向锁表示无竞争,轻量级锁表示单线程,都不满足会膨胀为重量级锁)