我在B站上学习多线程,老师讲解同步方法的时候写了这样一个代码
他把Thread.sleep方法写在了synchronized修饰的Buy方法里面,按照我的逻辑来说,这个锁应该不会释放,那么结果就是所有的票被第一个人抢光,我自己也写了这样的一个代码,确实是被第一个人抢光了,但是老师的结果却是这样的
这个我理解不了,他明明是把sleep写在synchronized修饰的Buy方法里面,为什么会释放锁呢?
我也是初学者,发表一下我的看法,你检查一下你的代码是不是加了static导致你锁住的是整个类,而截图中锁住的是一个实例,从而产生了题主说的输出结果差异
这一次执行完成buy之后,释放了线程。然后再是三个线程抢,抢到的,买到票,并且等100毫秒。再继续
https://baijiahao.baidu.com/s?id=1672876043133836013&wfr=spider&for=pc