对于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!!! 且程序一直处于挂起状态。
相关推荐
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
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());...
描述中提到的“puts the specified CPU in wait-for-event mode on the flow controller and puts the CPU in reset”,这是在描述一种低功耗策略,称为“等待事件”模式。在这种模式下,CPU会暂停执行当前的任务,...
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:...
本文档总结了富士通面试题中的关键知识点,涵盖了 XML 解析技术、Servlet 框架、wait() 和 sleep() 方法、UDDI、SOAP、WSDL 以及 Java 编程语言中访问修饰符、内部类和编程题。 一、XML 解析技术 XML 解析技术有...
- **MS SQL Server**:可以利用`WAITFOR DELAY`或`@@DATEFIRST`等函数来控制延迟时间。 - **MS Access**:由于其特性限制,可能需要更复杂的查询结构和时间测量方法。 - **Oracle**:可以使用`DBMS_LOCK.SLEEP`来...
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 ...
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 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
- **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 ...
线程池的创建方式包括继承Thread类或实现Runnable,线程池的管理包括submit提交任务,shutdown停止服务,以及wait、sleep等方法控制线程行为。线程池通过控制线程的生命周期,减少线程创建和销毁的开销,提高系统...
8. sleep() 和 wait() 的区别 sleep() 是线程类的方法,wait() 方法是 Object 方法。sleep() 方法是使线程停止一段时间的方法。在 sleep 时间间隔期满后,线程不一定立即恢复执行。wait() 是线程交互时,如果线程对...
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....
而在2013年辽宁卷中,"With little sleep and hardly any break, so he works from morning till night.","so"多余,因为前后句之间是顺承关系,只需要"And"即可。 此外,从句引导词的使用也需要特别关注。例如,...
/* Get display screen's text row and column information. */ GetConsoleScreenBufferInfo( hStdOut, &csbi ); /* Launch CheckKey thread to check for terminating keystroke.此线程用来控制线程和程序的...
sleep(1); } } ``` 在这个示例中,我们看到了守护进程创建的基本步骤: 1. 通过`fork()`创建子进程。 2. 子进程调用`chdir("/")`来更改工作目录为根目录。 3. 使用`setsid()`创建新会话。 4. 调用`umask(0)`以...
#### 一、Java中`wait`和`sleep`的区别及多线程下如何保证数据安全 1. **基本概念** - `wait` 和 `sleep` 方法均用于线程间的同步控制,但它们在实现机制上有显著不同。 - `wait` 方法属于 `Object` 类,需要在...
Reversing the order of obj.wait() and obj.notify() might cause this method to complete normally. - 调整顺序并不能解决问题,因为 `obj.notify()` 仍然在没有获取到 `obj` 监视器锁的情况下调用。 - E. A ...
} // Wait 100 milliseconds catch (InterruptedException e) { } // Ignore interruptions } } /** Start animating when the browser starts the applet */ public void start() { animator = ...
- 另外,短句中的 "I think you cant wait for someone to fly underneath you and save your life. I think you have to save yourself." 强调了自立自强的重要性,"save oneself" 是自救的意思,这对于理解和应用...