博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Thread 的 sleep() 和 wait() 的区别
阅读量:4290 次
发布时间:2019-05-27

本文共 1917 字,大约阅读时间需要 6 分钟。

1. sleep 和 wait 方法解释

sleep方法是Thread类里面的,主要的意义就是让当前线程停止执行,让出cpu给其他的线程,但是不会释放对象锁资源以及监控的状态,当指定的时间到了之后又会自动恢复运行状态。

wait方法是Object类里面的,主要的意义就是让线程放弃当前的对象的锁,进入等待此对象的等待锁定池,只有针对此对象调动notify方法后本线程才能够进入对象锁定池准备获取对象锁进入运行状态。

2. 实例

举个列子说明:

/** java中的sleep和wait的区别 */public class TestD {    public static void main(String[] args) {        new Thread(new Thread1).start;        try { Thread.sleep(5000);         } catch (Exception e) { e.printStackTrace;        }        new Thread(new Thread2).start;    }    private static class Thread1 implements Runnable{        @Override        publicvoid run{ synchronized (TestD.class) { System.out.println("enter thread1...");     System.out.println("thread1 is waiting..."); try { //调用wait方法,线程会放弃对象锁,进入等待此对象的等待锁定池 TestD.class.wait; } catch (Exception e) { e.printStackTrace; } System.out.println("thread1 is going on ...."); System.out.println("thread1 is over!!!"); }        }    }    private static class Thread2 implements Runnable{        @Override        public void run{ synchronized (TestD.class) { System.out.println("enter thread2...."); System.out.println("thread2 is sleep...."); //只有针对此对象调用notify方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。 TestD.class.notify; //================== //区别 //如果我们把代码:TestD.class.notify;给注释掉,即TestD.class调用了wait方法,但是没有调用notify //方法,则线程永远处于挂起状态。 try { //sleep方法导致了程序暂停执行指定的时间,让出cpu该其他线程, //但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 //在调用sleep方法的过程中,线程不会释放对象锁。 Thread.sleep(5000); } catch (Exception e) { e.printStackTrace; } System.out.println("thread2 is going on...."); System.out.println("thread2 is over!!!"); }        }    } }

运行效果:

enter thread1...thread1 is waiting...enter thread2....thread2 is sleep....thread2 is going on....thread2 is over!!!thread1 is going on ....thread1 is over!!!
TestD.class.notify;

运行效果:

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

相信看完例子应该就知道二者的区别了。

转载地址:http://ftggi.baihongyu.com/

你可能感兴趣的文章
javascript类的创建与实例对象
查看>>
javascript原型详解(1)
查看>>
netty源码分析之-处理器详解(9)
查看>>
javascript原型对象存在的问题(3)
查看>>
javascript原型继承(1)
查看>>
javascript原型继承-实现extjs底层继承(2)
查看>>
javascript设计模式-建立接口的方式(1)
查看>>
javascript设计模式-单体singleton模式(2)
查看>>
javascript设计模式-链式编程(3)
查看>>
大型高并发与高可用缓存架构总结
查看>>
javascript设计模式-工厂模式(4)
查看>>
javascript设计模式-组合模式(6)
查看>>
javascript设计模式-门面模式(7)
查看>>
javascript设计模式-享元模式(10)
查看>>
javascript设计模式-代理模式(11)
查看>>
Executor相关源码分析
查看>>
react之setState解析
查看>>
elasticsearch7.3版本已经不需要额外安装中文分词插件了
查看>>
【重大好消息】elasticsearch 7.3版本已经可以免费使用x-pack就可以设置账号和密码了,让你的数据不再裸奔
查看>>
解决使用logstash中jdbc导入mysql中的数据到elasticsearch中tinyint类型被转成布尔型的问题的方法
查看>>