黑马程序员技术交流社区
标题:
线程锁问题
[打印本页]
作者:
罗磊
时间:
2012-8-22 11:59
标题:
线程锁问题
Lock比synchronized有更好的性能。
区别在于synchronized会自动释放锁,而Lock要手动在finally从句中释放。
那么在开发中我们选择那个方式呢?看老师们的视频 好像都是用synchronized 为什么啊 !
作者:
李知伦
时间:
2012-8-22 12:51
Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。
Condition是Java5以后出现的机制,它有更好的灵活性,而且在一个对象里面可以有多个Condition(即对象监视器),则线程可以注册在不同的Condition,从而可以有选择性的调度线程,更加灵活。
随着灵活性的增加,也带来了更多的责任。不使用块结构锁就失去了使用 synchronized 方法和语句时会出现的锁自动释放功能。在大多数情况下,应该使用以下语句:
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}
Synchronized就相当于整个对象只有一个单一的Condition(即该对象本身)所有的线程都注册在它身上,线程调度的时候之后调度所有得注册线程,没有选择权,会出现相当大的问题
教学的例子当中,通常只有sell ticket一个动作,没有很多条件需要判断,所以编程和讲解都比较简单清晰吧....
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2