wait和sleep方法
共同点: wait方法和sleep方法的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态
不同点:
- 方法归属不同
- sleep方法是Thread的静态方法
- wait方法是Object的成员方法
- 醒来时机不同
- 执行sleep(long)和wait(long)线程都会等待相应毫秒后醒来
- wait(long)和wait() 还可以被notify唤醒,wait()如果唤醒就一直等待下去
- 它们都可以被打断唤醒
- 锁特性不同
- wait方法的调用必须要先获取wait对象的锁,sleep则无此限制
- wait方法执行后会释放对象锁,允许其他线程获得该对象锁
- sleep如果在synchronized代码块中,并不会释放对象锁