1.当前线程的同步方法、同步代码块结束
2.当前线程同步方法、同步代码块遇到break、return
3.当前线程在同步代码块、同步方法中出现未处理的error和exception,导致异常结束
4.当前线程在同步代码块、同步方法中调用了线程对象的wait()方法,当前线程暂停,并释放锁
注意:Thread.sleep()、Thread.yield()方法暂停当前线程执行,不会释放锁;其他线程调用该线程的suspend()方法将该线程挂起,该线程不会释放锁;避免使用suspend()和resume()控制线程,不推荐使用。