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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马伍仪华 中级黑马   /  2012-3-5 10:12  /  1227 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一般来说,在多线程程序中,某个任务在持有某对象的锁后才能运行任务,其他任务只有在该任务释放同一对象锁后才能拥有对象锁,然后执行任务。于是,想到,同一个任务在持有同一个对象的锁后,在不释放锁的情况下,继续调用同一个对象的其他同步(synchronized)方法,该任务是否会再次持有该对象锁呢?

2 个回复

正序浏览
同一个任务在调用同一个对象上的其他synchronized方法,可以再次获得该对象锁。

但是我也被锁住了 不是很明白
回复 使用道具 举报
一个任务可以多次获得对象的锁,如果一个方法在同一个对象上调用了第二个方法,后者又调用了同对象上的的另一个方法就会发生这种情况,JVM负责跟踪对象被加锁的次数。如果某个对象被解锁,其计数为0,在人第一给对象加锁时计数器会递增。——前提是只有首先获得锁的的任务才可以允许继续获得多个锁。每当离开一个synchronized方法时计数器递减,当计数器为0时,锁完全被释放,此时别的任务可以使用该资源。
参考《Java 编程思想 -并发一章》
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马