A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hanrongle 中级黑马   /  2013-7-26 11:43  /  1426 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-28 09:39 编辑

synchronized和lock到底如何应用?
哪种方式灵活方便,哪种方式应用更为广泛?

评分

参与人数 1黑马币 +5 收起 理由
杜光 + 5 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

4 个回复

倒序浏览
使用lock,是synchronized的升级机制,
Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。
可以查看一下API,上面说的也清楚,效果是一样的
回复 使用道具 举报 1 0
forward 发表于 2013-7-26 12:06
使用lock,是synchronized的升级机制,
Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁 ...

thank you!
回复 使用道具 举报
Lock类是jdk1.5中新加入的同步锁的升级解决方案。Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的Condition 对象。Lock 接口的实现允许锁在不同的作用范围内获取和释放,并允许以任何顺序获取和释放多个锁
synchronized 方法或语句的使用提供了对与每个对象相关的隐式监视器锁的访问,但却强制所有锁获取和释放均要出现在一个块结构中:当获取了多个锁时,它们必须以相反的顺序释放,且必须在与所有锁被获取时相同的词法范围内释放所有锁

评分

参与人数 1技术分 +3 收起 理由
杜光 + 3 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不同,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马