如图,两个方法中的synchronized块锁的是同个对象,所以每次只能先执行一个方法,等先抢的锁的方法执行完,后面的方法才能去执行,这样理解有没问题?
如果我上面理解没问题的话,那我这块代码不能理解,我用sleep方法先让consume()抢得object锁,然而它理应是进入了wait状态,一直没释放object锁,所以我的理解就是这是一个死锁,因为product()synchronized块要获取的object在consume()方法还没释放,而consume()方法却一直在wait等待别人notify()它。但是结果却不是死锁,结果如下,谁能帮我解惑吗?如果描述的不清楚,欢迎提问,我再理清下描述,感谢!
题主对
java.lang.Object.wait()
的理解出现偏差了,并不是题主所认为的:恰恰相反,方法原文说明里有一句:
说明它会释放锁的。