使用 sleep 方法可以让线程休眠,而使用 wait 方法则必须放在 synchronized 块里面。
1、wait还需要额外的方法notify/ notifyAll 进行唤醒,它们同样需要放在 synchronized 块里面,且获取对象的锁。当然也可以使用带时间的 wait(long millis) 方法,时间一到,无需其他线程唤醒,也会重新竞争获取对象的锁继续执行。
2、sleep方法短暂休眠之后会主动退出阻塞,而没有指定时间的wait方法则需要被其他线程中断后才能退出阻塞。sleep()和yield()是Thread类的方法。
3、wait() 是Object中定义的native方法。sleep()方法自带sleep时间,时间过后,Thread会自动被唤醒。 或者可以通过调用interrupt()方法来中断。