Object 中的wait和Thread中sleep的区别

摘自 http://www.cnblogs.com/loren-Yang/p/7538482.html

一、区别

1、wait()来自于Object类而sleep来自于Thread类

2、sleep没有释放锁,但是wait释放了锁(使得其他线程可以使用同步控制块或者方法锁)

3、wait,notify和notifyAll只能在同步控制方法或者同步控制块使用,而sleep能在各个地方使用

4、sleep必须捕获异常,但是其它wait不用

5、sleep让一个线程睡眠,等待一段时间后,自动醒来进入可运行状态,不会马上进入运行状态,因为线程调度机制恢复线程也需要时间。如果调用interrup方法,则会抛出InterruptedException。如果不捕获这个异常,那么会进入TERMINATED状态。如果捕获这个异常,那么可以在catch中继续执行后面的代码。

6、sleep是静态方法,只会让当前线程sleep,t.sleep()并不会让t进入sleep

如果线程并不处于wait,sleep,join状态时,调用interrupt方法线程不会抛出InterruptedException。

wait和notiy必须在synchronized方法或者block中。

wait要在while循环中。

上一篇:java OOP及相关基础知识汇总(转)


下一篇:iOS蓝牙开发(二)蓝牙相关基础知识