Java中 sleep和wait的区别是什么? 最好能举具体的例子说明
最近被问到这个问题,查找资料后写个例子,可看出其中差别。
1、首先wait是Object的方法,sleep是Thread的方法。
2、object.wait被某线程调用,要确保该线程能监控该对象,否则抛出IllegalMonitorStateException。之后该线程放弃......
答案就在这里:java sleep与wait的区别
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
sleep是线程休眠,这个时间交给系统做其他的事情,wait常用在线程同步,等待一个操作完成
sleep : 没有释放锁.
wait : 释放了锁.
多线程里面,如果很多线程使用共享资源,则会发生问题.为了解决这个问题就使用锁. 你可以理解为使用对象身上的一个标志.
例如 : 我和你一起看电视. 电视机就是共享资源. 我 和你就是两个线程. 遥控器就是锁. 有遥控器的人才能使用电视机.
假设遥控器在我身上. 如果你写的是 sleep()方法. 则表示遥控器还在我手里,只是我睡着了,我不能操作遥控器,你也别想.
你要是调用wait方法. 那么我就要交出遥控器,然后等着你换台. 你换完台以后就会调用notify方法. 或者notify .然后我就可以有可能拿到遥控器了
sleep : 没有释放锁.
wait : 释放了锁.
多线程里面,如果很多线程使用共享资源,则会发生问题.为了解决这个问题就使用锁. 你可以理解为使用对象身上的一个标志.
例如 : 我和你一起看电视. 电视机就是共享资源. 我 和你就是两个线程. 遥控器就是锁. 有遥控器的人才能使用电视机.
假设遥控器在我身上. 如果你写的是 sleep()方法. 则表示遥控器还在我手里,只是我睡着了,我不能操作遥控器,你也别想.
你要是调用wait方法. 那么我就要交出遥控器,然后等着你换台. 你换完台以后就会调用notify方法. 或者notify .然后我就可以有可能拿到遥控器了