synchronized和Lock的区别
1、synchronized是关键字属于jvm层面(底层通过monitor对象来完成);
Lock是具体类是api层面的锁;
2、synchronized不需要用户手动释放锁,synchronized代码执行完就会自动释放;
ReentrantLock则需要手动释放锁若不主动释放,就可能导致死锁现象;
3、synchronized不可中断,除非抛出异常或正常运行完成;
ReentrantLock可中断,1.设置超时方法tryLock(Long timeout,TimeUnit unit) 2.lockInterruptibly()放代码块中,调用interrupt()方法中断
4、synchronized是非公平锁
ReentrantLock既可以有公平锁又可以有非公平锁,默认是非公平锁,构造方法传true则为公平锁;
5、synchronized只可随机唤醒一个或唤醒全部
Lock可以绑定多个条件Condition,进行精确唤醒