java中的sleep()和wait()的区别
程序员文章站
2023-12-26 13:41:09
原地址:https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html ......
对于sleep()方法,我们首先要知道该方法是属于thread类中的。而wait()方法,则是属于object类中的。 sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会释放对象锁。 而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
wait只有在synchronized中才有意义
什么意思呢? 举个列子说明: 复制代码 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 } 复制代码 运行效果: 复制代码 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!!! 复制代码 且程序一直处于挂起状态。
原地址:https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html
推荐阅读
-
java中的sleep()和wait()的区别
-
PHP中new static() 和 new self() 的区别介绍_PHP
-
java中的关键字和标识符
-
在javaScript中关于submit和button的区别介绍_基础知识
-
php中全等===和相等==的用法区别
-
php中return 、exit 、break和contiue四种结构的用法区别
-
对java中的上转型和下转型的理解
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
javascript中的onkeyup和onkeydown区别介绍_基础知识
-
php中new self()和new static()两者之间的区别!