Java中wait和sleep方法的区别

163 阅读1分钟

共同点:

wait(),wait(long)和sleep(long) 的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态

不同点:

1、方法归属不同

sleep(long) 是Thread的静态方法,而wait(),wait(long)都是Object的成员方法,每个对象都有

2、醒来的时机不同

执行sleep(long)和wait(long)的线程都会在等待相应毫秒后醒来

wait(long)和wait()还可以被notify唤醒,wait()如果不唤醒就一直等待下去

他们都可以被打断唤醒

3、锁特性不同(重点)

wait方法的调用必须先获取wait对象的锁,而sleep则无此限制

wait方法执行后会释放对象锁,允许其它对象线程获取该对象锁(我放弃CPU,你们还可以用)

而sleep如果在synchronized代码块中执行,并不会释放对象锁(我放弃CPU,你们也用不了)