java中的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!'
“等一下,”他插嘴说,“这没有给她一个公平的解释机会!”
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。
而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
1 /**
2 *
3 */
4 package com.b510.test;
5
6 /**
7 * java中的sleep()和wait()的区别
8 * @author Hongten
9 * @date 2013-12-10
10 */
11 public class TestD {
12
13 public static void main(String[] args) {
14 new Thread(new Thread1()).start();
15 try {
16 Thread.sleep(5000);
17 } catch (Exception e) {
18 e.printStackTrace();
19 }
20 new Thread(new Thread2()).start();
21 }
22
23 private static class Thread1 implements Runnable{
24 @Override
25 public void run(){
26 synchronized (TestD.class) {
27 System.out.println("enter thread1...");
28 System.out.println("thread1 is waiting...");
29 try {
30 //调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池
31 TestD.class.wait();
32 } catch (Exception e) {
33 e.printStackTrace();
34 }
35 System.out.println("thread1 is going on ....");
36 System.out.println("thread1 is over!!!");
37 }
38 }
39 }
40
41 private static class Thread2 implements Runnable{
42 @Override
43 public void run(){
44 synchronized (TestD.class) {
45 System.out.println("enter thread2....");
46 System.out.println("thread2 is sleep....");
47 //只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
48 TestD.class.notify();
49 //==================
50 //区别
51 //如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify()
52 //方法,则线程永远处于挂起状态。
53 try {
54 //sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,
55 //但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
56 //在调用sleep()方法的过程中,线程不会释放对象锁。
57 Thread.sleep(5000);
58 } catch (Exception e) {
59 e.printStackTrace();
60 }
61 System.out.println("thread2 is going on....");
62 System.out.println("thread2 is over!!!");
63 }
64 }
65 }
66 }
2016-09-27 · 做真实的自己 用良心做教育
还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.
sleep和wait的区别还有:
1。这两个方法来自不同的类分别是Thread和Object
2。最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3。wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4。sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
- 官方电话
-
官方服务
- 官方网站