我学习多线程时,老师写了一个在锁里面sleep的的例子,但是就结果来看是释放了锁,这是为什么呢?

我在B站上学习多线程,老师讲解同步方法的时候写了这样一个代码
图片说明
图片说明

他把Thread.sleep方法写在了synchronized修饰的Buy方法里面,按照我的逻辑来说,这个锁应该不会释放,那么结果就是所有的票被第一个人抢光,我自己也写了这样的一个代码,确实是被第一个人抢光了,但是老师的结果却是这样的

图片说明

这个我理解不了,他明明是把sleep写在synchronized修饰的Buy方法里面,为什么会释放锁呢?

我也是初学者,发表一下我的看法,你检查一下你的代码是不是加了static导致你锁住的是整个类,而截图中锁住的是一个实例,从而产生了题主说的输出结果差异

这一次执行完成buy之后,释放了线程。然后再是三个线程抢,抢到的,买到票,并且等100毫秒。再继续

https://baijiahao.baidu.com/s?id=1672876043133836013&wfr=spider&for=pc