synchronized和Lock 差别?

suhenhappy 2010-04-20 11:33:37
请问下高手们,synchronized和Lock有什么差别啊? 用法怎么用啊? 现在是用synchronize好?还是用lock好 ?
...全文
1006 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alinchuan 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bao110908 的回复:]
有区别

所实现的锁功能是一致的,但是 Lock 的功能更为强大一些。

比如 Lock 可以产生多个条件变量,可以实现多个类似于 wait, notifyAll 的等待及唤醒功能。而 synchronized 只有一个条件变量,也就是锁对象的 wait 和 notifyAll
[/Quote]
顶 学习啦 !
yugong2009 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
synchronized 也有好处的,比如一些性能监控工具,可以监测到 synchronized 的锁。无法监测到 Lock 的锁定,毕竟 Lock 的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的。要监控工具能监测到 Lock 的锁定那还需要有一段时日。

另外,synchronized 在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没……
[/Quote]

正解,学习……
  • 打赏
  • 举报
回复
synchronized 也有好处的,比如一些性能监控工具,可以监测到 synchronized 的锁。无法监测到 Lock 的锁定,毕竟 Lock 的锁定是通过代码实现的,而 synchronized 是在 JVM 层面上实现的。要监控工具能监测到 Lock 的锁定那还需要有一段时日。

另外,synchronized 在锁定时如果方法块抛出异常,JVM 会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。但是 Lock 的话就享受不到 JVM 带来自动的功能,出现异常时必须在 finally 将锁释放掉,否则将会引起死锁。Lock 锁的代码结构一般是这样的:

lock.lock();
try {
xxxx;
} finally {
lock.unlock();
}
  • 打赏
  • 举报
回复
有区别

所实现的锁功能是一致的,但是 Lock 的功能更为强大一些。

比如 Lock 可以产生多个条件变量,可以实现多个类似于 wait, notifyAll 的等待及唤醒功能。而 synchronized 只有一个条件变量,也就是锁对象的 wait 和 notifyAll
soli11722984 2010-04-20
  • 打赏
  • 举报
回复
java5新特性之一,这个LOCK可以有很多用处,不过也相对烦琐了一点
和synchronized对比之下,其实都是为了实现同步功能,只是实现不一样,具体哪个好,看需求
hbgzg3006 2010-04-20
  • 打赏
  • 举报
回复
我咋不知道还有lock呢。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧