sleep() 和 wait() 有什么区别?

sleep()和wait()有什么区别

sleep()不是放锁,而wait()是释放的。
通俗的说,sleep()就是睡眠一段时间后自动醒来。
而wait()则是等待,直到有线程通知(notify())唤醒他才会重新工作。

就好比你睡觉,早上自然就行了,然后就去上班/上学了。
而和朋友出去玩,约好不见不散,你早到了,就会一直等,一直到你朋友来了告诉你“我来了”,然后你才会继续执行接下来的事情。

呵呵

1、这两个方法来自不同的类分别是Thread和Object
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在。
4、sleep是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制. 5、而wait,首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是 thisOBJ.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!' 

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



先说wait,wait的本质是条件等待,这里涉及到了锁的概念(也就是多线程中要保证线程安全的锁)。所谓条件等待就是已经获得了锁的线程,由于需要满足某种条件才能继续执行,而当前不满足条件,所以只能等待。所以调用wait的一个前提条件就是要先拿到锁。拿到锁的线程,wait之后,该线程就进入条件等待队列,并且释放锁,让其他线程执行。当其他线程的执行使得条件满足之后,再调用notify或者notifyAll方法,将条件等待队列中的线程唤醒,这些线程再去请求锁,拿到锁的线程接着去执行。建议你看一下ReentrantLock类,顺便用一下Condition类,看一看《Java核心技术》第二卷关于线程那一章的讲解。

调用wait()/wait(long t)线程进入Waiting/TimeWaiting状态。

sleep(long t)的意思是暂停当前线程t毫秒,当然,其他线程就得到了时间片,sleep与线程是否获得锁无关。调用sleep线程进入TimeWaiting状态。

 

这里有张比较基础的图,你看一下。



1、这两个方法来自不同的类分别是Thread和Object

2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在。

4、sleep是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.

5、而wait,首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是 thisOBJ.wait(),这里的暂停是阻塞,还是"点火->烧水->煮饭"。



sleep是让线程指定休眠时间,然后继续工作
wait则是等待,直到有线程通知notify()唤醒他才会重新工作。

sleep是你困了,要睡觉,等你睡醒了再干活。
wait是你现在没事做,先眯会儿吧,什么时候领导提醒你该干活了再干。

上一篇:
下一篇: