sleep源代码如下:
publicclassthreadimplementsrunnable {
publicstaticnativevoidsleep (long millis ) throws InterruptedException;
publicstaticvoidsleep (long millis,int nanos ) throws InterruptedException {
if(Millis0) {
thrownewillegalargumentexception (timeoutvalueisnegative );
}
if(Nanos0|||Nanos999999 ) {
thrownewillegalargumentexception (nanosecondtimeoutvalueoutofrange );
}
if(Nanos=500000|() Nanos!=0 millis==0) }{
米里斯;
}
sleep(Millis );
}
//.
}
wait源代码如下:
公共类对象{
publicfinalnativevoidwait (长时间输出) throws InterruptedException;
publicfinalvoidwait (长时间外出,int nanos ) throws InterruptedException { )。
if (时间输出0 ) {
thrownewillegalargumentexception (timeoutvalueisnegative );
}
if(Nanos0|||Nanos999999 ) {
thrownewillegalargumentexception (nanosecondtimeoutvalueoutofrange );
}
if(Nanos0) {
时间输出;
}
等待(时间输出;
}
//.
}
1、sleep来自Thread类,wait来自Object类。
2、主要是sleep方法没有解锁,而wait方法解除锁定,使其他线程可以使用同步控制块或方法。
3、等待、通知和通知全部只能在同步控制方法或同步控制块中使用,但sleep可以在任何地方使用(
4、sleep必须捕获异常,而wait、notify和notifyAll不需要捕获异常
) sleep方法是Thread类的方法,表示线程处于休眠状态,等待一段时间后自动醒来变为可用
执行状态不会立即变为执行状态。 一个线程对象调用了sleep,因为线程调度机制恢复线程的运行也需要时间
方法之后,并不释放他拥有的所有对象锁,因此也不影响其他进程对象的执行。 但是在sleep的过程中
过程中,其他对象可能会调用其interrupt (),从而导致InterruptedException异常。 如果你的程序没有抓住这个区别
通常,线程异常终止,处于TERMINATED状态。 当程序捕捉到此异常时,程序将继续运行catch语
语句块(可能还有finally语句块)和后续代码。
sleep ) )请注意,方法是静态方法。 也就是说,他只对当前对象有效,t.sleep ) )将t对象放入sleep中,从而
的做法是错误的,当前线程只是sleep,而不是t线程
)2) wait是Object的成员方法,一个对象调用wait方法时,必须采用notify ) )和notifyAll ) )方法
启动此进程; 线程具有某个对象或特定对象的同步锁(wait ) )时,该线程将释放其所有内容
同步资源,而不仅限于调用此wait ()方法的对象。 wait ) )方法也可能在wait过程中成为其他对
通过调用interrupt ()方法生成。