3.在同步中,对cpu的执行权和锁的处理不同 wait:释放执行权,释放锁。 sleep:释放执行权,不释放锁。 因为进入wait方法的线程需要和相对应的notify,notifyAll方法相搭配才能唤醒。而sleep方法等过了指定时间后自动唤醒。 在同步中谁拿锁谁执行,如果wait方法不释放锁,那么没有能去唤醒该线程的线程。 二停止线程的方...
一. Sleep和wait的区别 基本差别 sleep是Thread类的方法,wait是Object类中定义的方法(底层是native方法) sleep()方法可以在任何地方使用 wait()方法只能在synchronized方法或synchronized块中使用(只有获取锁才可以通过锁来调用wait()方法,如锁住的是Key,则key.wait(100),即key资源被释放掉了100ms) 最主要的本质区别...
Sleep():此方法用于将当前线程的执行暂停指定时间(以毫秒为单位)。在这里,线程不会失去其对监视器的所有权并恢复其执行 Wait():该方法在对象类中定义。它告诉调用线程(也称为当前线程)等待,直到另一个线程调用该对象的notify()或notifyAll()方法,该线程等待,直到它重新获得监视器的所有权并恢复执行。 睡眠方法示...
wait可以让同步方法或者同步块暂时放弃对象锁,而将它暂时让给其它需要对象锁的人(这里应该是程序块,或线程)用,这意味着可在执行wait()期间调用线程对象中的其他同步方法!在其它情况下(sleep啊,suspend啊),这是不可能的.但是注意我前面说的,只是暂时放弃对象锁,暂时给其它线程使用,我wait所在的线程还是要把这个对象...
sleep方法可以在任何地方使用,而wait方法只能在同步控制方法或者同步控制块里面(synchronized)使用。 5.使用限制不同 sleep方法必须捕获异常,而wait方法不需要捕获异常。 6.从代码层面看待他们的不同 其实java里面的wait()和notify()就类似于操作系统中的p和v操作,p(wait)操作负责阻塞当前线程(当线程进来时发现没有想...
sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。
sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。
sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。