1 synchronized 和 Lock的区别
a) 存在层次
synchronized是关键字,在jvm层面上,由内置语言实现。
Lock是接口、类。
b) 锁的释放
synchronized在线程发生异常时会自动释放锁,因此不会发生异常死锁。
Lock异常时不会自动释放锁,必须手动在finally中释放锁。
c) 锁的类型和状态
synchronized是非中断锁(必须等待线程执行完成释放锁)、不可判断(判断是否有锁),非公平(等待的时间不一样)。
Lock是可中断锁(可以手动中断)、可判断(判断是否有锁),公平(两者皆可)。
d) 使用 及 性能
synchronized用于少量代码的同步。
Lock用于大量代码的同步。
Lock锁可以使用读锁提高多线程读效率。
2 synochronied的缺点
a) 不能响应进行中断;
b) 同一时刻无论是读写都只能有一个线程对共享资源进行操作,其他线程只能进行等待。
c) 锁的释放是由虚拟机内部进行操作,不可进行人工操作干预,既有优点,又有缺点。
优点就是不用担心会造成死锁,抛出异常后,会自动释放该锁。
缺点就当有一个线程获取了对应的锁并执行之后,其他线程便只能一直等待,直到线程释放该锁,这样会导致性能偏低
解决:
Lock接口的提出就是为了完善synchronized得不完美,变成了jdk层面实现的接口,可以人工灵活的对共享资源变量的操作和控制,无论读还是写的操作。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42081709/article/details/89598590