`

wait and sleep

 
阅读更多

java中的sleep()和wait()的区别

 

对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。

sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。

在调用sleep()方法的过程中,线程不会释放对象锁。

而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备

获取对象锁进入运行状态。

什么意思呢?

举个列子说明:

/**
 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 }

 运行效果:

enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!
thread1 is going on ....
thread1 is over!!!

 

如果注释掉代码:

1 TestD.class.notify();

运行效果:
enter thread1...
thread1 is waiting...
enter thread2....
thread2 is sleep....
thread2 is going on....
thread2 is over!!!

且程序一直处于挂起状态。
分享到:
评论

相关推荐

    Delphi的延时函数代替sleep

    procedure delay(msecs:integer); var Tick: DWord; Event: THandle;... while (msecs > 0) and (MsgWaitForMultipleObjects(1, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do begin Appl

    sql最全的常用命令语句

    select * from master.dbo.sysprocesses where spid > 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch (minute, -10, getdate()) and login_time (minute, -10, getdate());...

    sleep-tegra20.rar_event

    描述中提到的“puts the specified CPU in wait-for-event mode on the flow controller and puts the CPU in reset”,这是在描述一种低功耗策略,称为“等待事件”模式。在这种模式下,CPU会暂停执行当前的任务,...

    微软内部资料-SQL性能优化3

    Lesson 1: Concepts – Locks and Lock Manager 3 Lesson 2: Concepts – Batch and Transaction 31 Lesson 3: Concepts – Locks and Applications 51 Lesson 4: Information Collection and Analysis 63 Lesson 5:...

    富士通面试题.doc

    本文档总结了富士通面试题中的关键知识点,涵盖了 XML 解析技术、Servlet 框架、wait() 和 sleep() 方法、UDDI、SOAP、WSDL 以及 Java 编程语言中访问修饰符、内部类和编程题。 一、XML 解析技术 XML 解析技术有...

    Time-Based Blind SQL Injection using heavy queries- A practical approach for MS SQL Server, MS Access, Oracle and MySQL databases and Marathon Tool

    - **MS SQL Server**:可以利用`WAITFOR DELAY`或`@@DATEFIRST`等函数来控制延迟时间。 - **MS Access**:由于其特性限制,可能需要更复杂的查询结构和时间测量方法。 - **Oracle**:可以使用`DBMS_LOCK.SLEEP`来...

    UNIX环境高级编程英文第三版+源码

    10.19 sleep, nanosleep, and clock_nanosleep Functions 373 10.20 sigqueue Function 376 10.21 Job-Control Signals 377 10.22 Signal Names and Numbers 379 10.23 Summary 381 Chapter 11. Threads 383 11.1 ...

    UNIX环境高级编程(第二版,英文版)

    wait3 and wait4 Functions Section 8.9. Race Conditions Section 8.10. exec Functions Section 8.11. Changing User IDs and Group IDs Section 8.12. Interpreter Files Section 8.13...

    mysql安装脚本

    mysql一键自动安装脚本 #Mysql install directory and ... echo "tar mysql please wait......" tar zvxf mysql-5.1.65.tar.gz sleep 3 #insert mysql user and group cat /etc/group |grep mysql

    TMS320F28335

    - **Description**: The device supports various low-power modes, including sleep and shutdown modes, to reduce power consumption. - **Advantages**: Extends battery life in portable devices and ...

    java面试第二部分:多线程与锁

    线程池的创建方式包括继承Thread类或实现Runnable,线程池的管理包括submit提交任务,shutdown停止服务,以及wait、sleep等方法控制线程行为。线程池通过控制线程的生命周期,减少线程创建和销毁的开销,提高系统...

    java基础考试题

    8. sleep() 和 wait() 的区别 sleep() 是线程类的方法,wait() 方法是 Object 方法。sleep() 方法是使线程停止一段时间的方法。在 sleep 时间间隔期满后,线程不一定立即恢复执行。wait() 是线程交互时,如果线程对...

    VB编程资源大全(英文源码 API)

    and view information about the window, such as its hwnd, size, and parent window.<END><br>29,launcher.zip This is an ActiveX DLL that causes a client app to wait for another app to finish....

    临场实战提分技巧短文改错第三讲破解虚词之错课件--名师微课堂(自制).pptx

    而在2013年辽宁卷中,"With little sleep and hardly any break, so he works from morning till night.","so"多余,因为前后句之间是顺承关系,只需要"And"即可。 此外,从句引导词的使用也需要特别关注。例如,...

    windows下vc多线程编程

    /* Get display screen's text row and column information. */ GetConsoleScreenBufferInfo( hStdOut, &csbi ); /* Launch CheckKey thread to check for terminating keystroke.此线程用来控制线程和程序的...

    Linux daemon process and zombie process

    sleep(1); } } ``` 在这个示例中,我们看到了守护进程创建的基本步骤: 1. 通过`fork()`创建子进程。 2. 子进程调用`chdir("/")`来更改工作目录为根目录。 3. 使用`setsid()`创建新会话。 4. 调用`umask(0)`以...

    java面试题

    #### 一、Java中`wait`和`sleep`的区别及多线程下如何保证数据安全 1. **基本概念** - `wait` 和 `sleep` 方法均用于线程间的同步控制,但它们在实现机制上有显著不同。 - `wait` 方法属于 `Object` 类,需要在...

    ORACLE认证考试ocjp题库(覆盖率99%)本人刚考完

    Reversing the order of obj.wait() and obj.notify() might cause this method to complete normally. - 调整顺序并不能解决问题,因为 `obj.notify()` 仍然在没有获取到 `obj` 监视器锁的情况下调用。 - E. A ...

    2D弹性球动画(对初学者很有参考价值)

    } // Wait 100 milliseconds catch (InterruptedException e) { } // Ignore interruptions } } /** Start animating when the browser starts the applet */ public void start() { animator = ...

    每天学习英语,每天学习一点点,积少成多!精选.doc

    - 另外,短句中的 "I think you cant wait for someone to fly underneath you and save your life. I think you have to save yourself." 强调了自立自强的重要性,"save oneself" 是自救的意思,这对于理解和应用...

Global site tag (gtag.js) - Google Analytics