黑马程序员技术交流社区

标题: 我又被锁住了! [打印本页]

作者: 黑马伍仪华    时间: 2012-3-5 10:12
标题: 我又被锁住了!
一般来说,在多线程程序中,某个任务在持有某对象的锁后才能运行任务,其他任务只有在该任务释放同一对象锁后才能拥有对象锁,然后执行任务。于是,想到,同一个任务在持有同一个对象的锁后,在不释放锁的情况下,继续调用同一个对象的其他同步(synchronized)方法,该任务是否会再次持有该对象锁呢?

作者: 马胜平    时间: 2012-3-5 10:38
一个任务可以多次获得对象的锁,如果一个方法在同一个对象上调用了第二个方法,后者又调用了同对象上的的另一个方法就会发生这种情况,JVM负责跟踪对象被加锁的次数。如果某个对象被解锁,其计数为0,在人第一给对象加锁时计数器会递增。——前提是只有首先获得锁的的任务才可以允许继续获得多个锁。每当离开一个synchronized方法时计数器递减,当计数器为0时,锁完全被释放,此时别的任务可以使用该资源。
参考《Java 编程思想 -并发一章》
作者: 王国华    时间: 2012-3-5 11:32
同一个任务在调用同一个对象上的其他synchronized方法,可以再次获得该对象锁。

但是我也被锁住了 不是很明白




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2