sleep与wait
sleep:本线程进入睡眠状态,不释放锁,睡眠时间结束后,会自动恢复运行
wait: 释放锁,本线程进入等待状态
notify: 随机唤醒一个在锁上等待的线程,例如:唤醒了线程A
在本线程执行结束后,或者释放锁后,A线程会获取到锁,继续执行
notifyAll: 唤醒所有在锁上等待的线程,让它们去竞争锁,其中一个线程竞争胜出,例如:线程A竞争胜出
在本线程执行结束后,或者释放锁后,A线程会获取到锁,继续执行
注意:synchronized代码块执行结束后,会自动释放锁