首页 > 试题广场 >

请你简述synchronized和java.util.con

[问答题]
请你简述一下synchronized与java.util.concurrent.locks.Lock的相同之处和不同之处?
相同点:两者都是用来实现对某个资源的同步。

两者区别如下:

(1) 用法不一样。synchronized可以用于修饰方法,也可以用在代码块中。Lock需要指定起始和终点位置,一般放在try-finally结构中,try开始执行lock方法,finally中执行unlock方法。synchronized是托管给JVM执行的,Lock是通过代码执行的。

(2) 性能不一样。在资源竞争不激烈情况下,synchronized的性能比Lock好,而在资源竞争激烈时,synchronized的性能下降很快,而Lock基本保持不变。

锁机制不一样。synchronized获得锁和释放锁都是在块结构中,获取多个锁时必须以相反顺序释放,并且自动释放锁。Lock需要开发人员手动释放锁,并且放在finally中。

发表于 2019-02-21 15:53:41 回复(0)
相同点:两者都是用来实现对某个资源的同步。 两者区别如下: (1) 用法不一样。synchronized可以用于修饰方法,也可以用在代码块中。Lock需要指定起始和终点位置,一般放在try-finally结构中,try开始执行lock方法,finally中执行unlock方法。synchronized是托管给JVM执行的,Lock是通过代码执行的。 (2) 性能不一样。在资源竞争不激烈情况下,synchronized的性能比Lock好,而在资源竞争激烈时,synchronized的性能下降很快,而Lock基本保持不变。 锁机制不一样。synchronized获得锁和释放锁都是在块结构中,获取多个锁时必须以相反顺序释放,并且自动释放锁。Lock需要开发人员手动释放锁,并且放在finally中。
发表于 2019-05-02 12:12:27 回复(0)
synchronized和lock都是实现线程资源同步的
前者是Java的关键字,依赖于jvm,用来修饰方法或者代码块
后者是一个接口,需要指定开始和结束位置,而且在try-finally中执行,在try中执行lock方法,在finally中执行unlock方法
前者在出现异常后会自动释放锁,后者必须通过unlock手动释放
前者会让等待的线程一直等待不会响应中断,后者会响应中断
发表于 2019-10-19 14:15:02 回复(0)
两者都是用于实现线程资源同步,都是可重入锁。
(1)前者依赖于jvm,实时上是由monitor实现,底层由linux的mutex;后者依赖于jdk的api,依托unsafe类的park和unpark方法;
(2)后者功能更强大,可以实现等待可中断,可实现公平锁,可指定唤醒。
(3)前者异常后自动释放锁,而后者需要手动释放锁
(4)由于jdk1.6之后出现的锁粗化,锁消除,偏向锁等优化,性能已经不是必要因素。
发表于 2019-07-17 17:58:39 回复(0)
回答的非常正常
发表于 2019-03-03 11:24:26 回复(0)