小案例实现 顾客:买包子,店主:(几秒后)做好包子,顾客:吃包子
为什么把店主的sleep放在synchronized外就可以顺利执行,放在synchronized里面就会有如图1情况
图2 是想要效果
小案例实现 顾客:买包子,店主:(几秒后)做好包子,顾客:吃包子
为什么把店主的sleep放在synchronized外就可以顺利执行,放在synchronized里面就会有如图1情况
图2 是想要效果
在锁里面休息,出来之后还是会继续抢夺CPU的执行权,也就容易出现同一个线程多次执行,另外一个线程运气不好抢不到执行权,也就容易出现图一的问题
锁外面休息,等于线程执行出来了,就休息,然后等待唤醒,这样保证同一时间只有一个线程在运行,执行完了就休息,唤醒另外一个线程,这个是典型的生产者与消费者模式