sleep和wait有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sleep和wait有啥区别相关的知识,希望对你有一定的参考价值。

sleep和wait的区别:

1、sleep的意思是:睡,睡觉,睡眠。

2、wait的意思是:等候,推迟,延缓等待,耽搁,伺候用餐。

拓展资料

sleep的用法

1、They were exhausted from lack of sleep 

由于缺乏睡眠,他们非常疲惫。

2、During the car journey, the baby slept 

坐车来的路上,宝宝睡着了。

3、I think he may be ready for a sleep soon. 

我想他也许很快就要睡一觉了。

4、I can't get to sleep with all that singing. 

那些歌声搅得我无法入睡。

5、I didn't lose too much sleep over that investigation. 

我并不太担心那个调查。

wait

1、I walk to a street corner and wait for the school bus 

我走到街角等校车。

2、There'll be a car waiting for you 

会有辆汽车等你。

3、I want to talk to you, but it can wait 

我想和你谈谈,但可以晚点再说。

4、If you think this all sounds very exciting, just wait until you read the book 

如果你觉得所有这些听起来令人兴奋,那就等着去读这本书吧。

5、'Wait a minute!' he broke in. 'This is not giving her a fair hearing!' 

“等一下,”他插嘴说,“这没有给她一个公平的解释机会!”

参考技术A sleep和wait区别:
相同点:
1. 都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。
2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。
如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() 中直接return即可安全地结束线程。
注意事项:
InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。
不同处:
1.Thread类的方法:sleep(),yield()等
Object的方法:wait()和notify()等
2.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。
sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
参考技术B sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。
wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。
所以
sleep(100L)意思为:占用CPU,线程休眠100毫秒
wait(100L)意思为:不占用CPU,线程等待100毫秒本回答被提问者采纳
参考技术C sleep 英 [sli:p] 美 [slip]
vi. 睡,睡觉;
vi. 睡,睡觉; 睡眠状态;
vt. 为…提供床位; 提供住宿; 以睡觉打发日子;
[例句]They were exhausted from lack of sleep
由于缺乏睡眠,他们非常疲惫。

wait 英 [weɪt] 美 [wet]
vt. 等待; 等候; (尤指长期地) 希望; 盼望;
vi. 准备妥; 在手边; 可得到; 可使用;
vt. 推迟,搁置,延缓;
[例句]I walk to a street corner and wait for the school bus
我走到街角等校车。
参考技术D sleep可以指定等待时间,时间到了之后自动唤醒。
wait不需要指定等待时间,需要手动唤醒。

sleep()方法和wait()方法的区别? sleep()方法和yield()方法的区别?

sleep()方法和wait()方法的区别?

  1. sleep方法是Thread的静态方法,wait方法是Object类的普通方法
  2. sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的)
  3. wait方法用于线程间通信,而sleep方法用于短暂的暂停线程
  4. sleep针对当前线程,而wait针对被同步代码块加锁的对象
  5. sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待
  6. 调用wait方法会暂停线程,当前线程释放对象的同步锁,进入等待池(wait pool),只有调用对象的notify或者notifyAll方法唤醒时,线程进入等锁池(lock pool),直到线程再次获得对象的锁才会进入就绪状态
  7. wait方法(notify,notifyAll)只能在同步方法或者同步块中使用(如果在non-synchronized函数或non-synchronizedblock中进行调用,虽然能编译通过,但在运行时会发生illegalMonitorStateException的异常);sleep方法可以在任意位置使用

注:

  如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程

sleep()方法和yield()方法的区别?

  1. sleep方法给其他线程机会时不考虑线程优先级(优先级低的也有可能);而yield方法只会给相同优先级或者更高优先级线程机会(如果没有相同或者更高优先级的线程,该线程会继续运行)
  2. 线程执行sleep方法进入阻塞状态,执行yield方法进入就绪状态

以上是关于sleep和wait有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

selenium.wait()、selenium.wait(2000) 和 Thread.sleep(2000) 有啥区别? [复制]

java中yeild()方发,wait()方法和sleep()有啥区别

sleep与 wait区别

使用Timer和sleep有啥区别

timeunit的sleep和thread的sleep有啥区别

线程中wait 和sleep 的区别