简述Java多线程中的sleep和wait异同点?
相同点:
- 可以让线程进入冻结状态。
不同点:
- 调用方式:
- sleep必须传时间。时间结束线程进入临时阻塞或者运行状态。
- wait非必传时间,假设没有时间的话需要依靠同一把锁内的其它线程通过notify或者notifyAll进行唤醒。
- 所属类:
- sleep属于Thread类的静态方法。
- wait属于Object类的静态方法。
- 使用环境:
- sleep非必在同步中使用。
- wait必须在同步中使用。
- 同步中使用差别:假设都在同一把锁的同步中调用时,
- sleep不会释放锁,其它子线程无法进入。
- wait会释放锁,允许其它线程进入。