黑马程序员技术交流社区
标题:
昨天写的单例模式有个疑问,lock和Synchronized的锁定区别。
[打印本页]
作者:
高顺德
时间:
2013-3-26 11:56
标题:
昨天写的单例模式有个疑问,lock和Synchronized的锁定区别。
本帖最后由 天下 于 2013-3-26 15:53 编辑
毕老是写的锁定用的是Synchronized,那可不可以用lock呢, 为什么? 它们啥区别?什么时候用lock什么时候用Synchronized?
作者:
袁梦希
时间:
2013-3-26 12:08
楼主你好,我来回答你的问题。具体谈一谈Lock接口吧。
Lock接口:多线程在JDK1.5版本升级时,推出一个接口Lock接口。
解决线程安全问题使用同步的形式,(同步代码块,要么同步函数)其实最终使用的都是锁机制。
到了后期版本,直接将锁封装成了对象。线程进入同步就是具备了锁,执行完,离开同步,就是释放了锁。
在后期对锁的分析过程中,发现,获取锁,或者释放锁的动作应该是锁这个事物更清楚。所以将这些动作定义在了锁当中,并把锁定义成对象。
所以同步是隐示的锁操作,而Lock对象是显示的锁操作,它的出现就替代了同步。
在之前的版本中使用Object类中wait、notify、notifyAll的方式来完成的。那是因为同步中的锁是任意对象,所以操作锁的等待唤醒的方法都定义在Object类中。
而现在锁是指定对象Lock。所以查找等待唤醒机制方式需要通过Lock接口来完成。而Lock接口中并没有直接操作等待唤醒的方法,而是将这些方式又单独封装到了一个对象中。这个对象就是Condition,将Object中的三个方法进行单独的封装。并提供了功能一致的方法 await()、signal()、signalAll()体现新版本对象的好处。
作者:
张东贤
时间:
2013-3-26 20:36
lock是1.5的新特性在java.util.concurrent。locks包下,它完全可以取代synchronized,而去比它更灵活,
用程序员手动释放锁,虽然有失优雅,
但是保证了程序的阅读性
还有读写锁,灵活的很,
妙哉妙哉
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2