线程中的wait()和sleep()有什么区别?
我是否理解wait()-ing线程仍然处于运行模式并使用CPU周期,但sleep()-ing不消耗任何CPU周期正确?
为什么我们同时使用wait()和sleep()?
它们的实现在较低级别上有什么不同?
线程中的wait()和sleep()有什么区别?
我是否理解wait()-ing线程仍然处于运行模式并使用CPU周期,但sleep()-ing不消耗任何CPU周期正确?
为什么我们同时使用wait()和sleep()?
它们的实现在较低级别上有什么不同?
当前回答
等待和睡觉是两回事:
在sleep()中,线程在指定的时间内停止工作。 在wait()中,线程停止工作,直到被等待的对象被通知,通常由其他线程通知。
其他回答
实际上,所有这些都在Java文档中有清楚的描述(但我是在阅读答案后才意识到这一点)。
http://docs.oracle.com/javase/8/docs/api/index.html:
wait() -当前线程必须拥有该对象的监视器。线程释放 该监视器的所有权,并等待直到另一个线程通知 在此对象的监视器上等待的线程可以通过 调用notify方法或notifyAll方法。那么线程 等待,直到它可以重新获得监视器的所有权并恢复执行。
sleep() -根据系统计时器和调度器的精度和准确性,使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数。线程不会失去任何监视器的所有权。
wait()和sleep()的区别
最根本的区别是wait()是Object的非静态方法,sleep()是Thread的静态方法。 主要的区别是wait()释放锁,而sleep()在等待时不释放任何锁。 Wait()用于线程间通信,而sleep()通常用于在执行时引入暂停。 wait()应该从synchronise内部调用,否则我们会得到一个IllegalMonitorStateException,而sleep()可以在任何地方调用。 要从wait()再次启动线程,必须无限期地调用notify()或notifyAll()。至于sleep(),线程肯定会在指定的时间间隔后启动。
相似之处
两者都使当前线程进入不可运行状态。 两者都是本机方法。
简单地说,wait是等待,直到其他线程调用你,而sleep是在指定的一段时间内“不执行下一个语句”。
此外,sleep是Thread类中的静态方法,它在线程上操作,而wait()是Object类中的静态方法,在对象上调用。
还有一点,当你在某个对象上调用wait时,线程同步该对象,然后等待。:)
来源:http://javaconceptoftheday.com/difference-between-wait-and-sleep-methods-in-java/
wait()方法。
1)调用wait()方法的线程释放它持有的锁。
2)在其他线程调用同一锁上的notify()或notifyAll()方法后,线程重新获得锁。
3) wait()方法必须在同步块内调用。
4) wait()方法总是在对象上被调用。
5)等待中的线程可以通过调用notify()或notifyAll()方法被其他线程唤醒。
6)要调用wait()方法,线程必须有对象锁。
睡眠()方法
1)调用sleep()方法的线程不释放它持有的锁。
2) sleep()方法可以在同步块内部或外部调用。
3) sleep()方法总是在线程上调用。
4)睡眠线程不能被其他线程唤醒。如果这样做,线程将抛出InterruptedException。
5)调用sleep()方法时,线程不需要有对象锁。
Wait()和sleep()的区别?
thread . sleep () 一旦它的工作完成,它就会向所有人释放锁。直到它永远不会向任何人释放锁。
Sleep() take the key, its never release the key to anyone, when its work completed then only its release then only take the key waiting stage threads.
Object.wait () 当它进入等待阶段时,它将释放键,并根据参数等待一些秒。
例如:
你的右手拿着咖啡,你可以拿另一个同手的任何一个人,什么时候你会放下然后只拿另一个同类型的物体在这里。也。这是sleep() 你睡觉的时候你什么工作都没做,你只是在睡觉。这里也一样。
wait()。当你被放下,在等待的时候再拿一个,那就是等待
你在你的系统中播放电影或任何东西,就像播放器一样,你一次不能播放多个,对吧,就是在这里,当你关闭并选择另一个任何人的电影或歌曲时,这意味着等待