什么时候释放锁:
(1)当前线程切换为 wait 状态时释放同步锁
(2)当同步块执行结束时释放同步锁
正确阻塞线程示例:(在同步块中,在循环中调用阻塞方法)
public void execute() throws InterruptedException {
synchronized (this) {
while (isAwakened()) { // isAwakened() 是满足被唤醒的条件
this.wait();
}
}
}
注意事项:
Thread.sleep() 和 Thread.yield() 并不释放锁
参考文章: