印象中有两点:
1. wait是让当前线程在某个对象的等待池中等待,当前线程在wait前必须拿到了这个对象的锁,否则将抛出IllegalMonitorStateException。由于任何对象都可以充当锁,因此任何对象都具备调用wait方法的资格,wait方法是定义在Object类中的。 sleep是无条件的,任何线程都可以sleep,因此sleep方法是Thread类的静态方法。
2. 线程wait后就放弃了CPU的执行权和执行资格,也放弃了原先持有的锁。因此wait的线程被notify后,必须再次获得锁才能继续执行代码。线程sleep后放弃了CPU的执行权和执行资格,但不放弃锁(如果有的话),醒来后只要CPU和操作系统说“轮到你了”,就可以继续执行代码。
请楼下补充。。。 |