Java线程的sleep和wait有共同的作用,就是都能使当前线程任务停止,但是他们有很大的不同。
关于sleep和wait方法主要区别有:
1、这两个方法来自不同的类,sleep是Thread类的方法,wait是Object的方法。
2、sleep表示让一个线程进入睡眠,等待一定时间之后,自动醒来进入到可运行状态。等待进入运行态,不需要唤醒。
wait是object的成员方法,一个对象调用了wait也能使线程停止,但是需要notify()或者notifyAll()唤醒进程。
3、sleep方法并不释放锁,而wait方法释放锁,可以使其他线程使用同步控制块或者方法。
所以wait,notify,notifyAll 只能在同步控制方法或同步控制块里面使用。而sleep则没有限制。
4、sleep必须捕获异常,因为当一个线程在sleep过程中,可能有其他的方法调用它的interrupt,
产生intertuptException 异常,如果不捕获这个异常,线程就会异常终止。进入terminated状态。
5、sleep是一个静态方法,只对当前对象有效,通过t.sleep想让t对象进入sleep是错误的,他只会使当前线程进入sleep.