详解Java中的sleep()和wait()的区别

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

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

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

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

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

什么意思呢?

举个列子说明:

/**

*

*/

package com.b510.test;

/**

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

* @author Hongten Java学习交流QQ群:589809992 我们一起学Java!

* @date 2013-12-10

*/

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

public void 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!!!

如果注释掉代码:

1 TestD.class.notify();

运行效果:

enter thread1...

thread1 is waiting...

enter thread2....

thread2 is sleep....

thread2 is going on....

thread2 is over!!!

且程序一直处于挂起状态。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java system sleep_详解Java中的sleep()和wait()的区别相关推荐

  1. java lock unlock_详解Java中的ReentrantLock锁

    ReentrantLock锁 ReentrantLock是Java中常用的锁,属于乐观锁类型,多线程并发情况下.能保证共享数据安全性,线程间有序性 ReentrantLock通过原子操作和阻塞实现锁原 ...

  2. java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...

  3. java list jstl_详解javaweb中jstl如何循环List中的Map数据_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 详解javaweb中jstl如何循环List中的Map数据 第一种方式: 1:后台代码(测试) List> lis ...

  4. java web ip_详解Java Web如何限制访问的IP的两种方法

    前一阵子因为在做项目时碰到了这个功能,现在好好总结一下,至于为什么要限制IP访问,我就不多说了.然后百度了一下,现在主要有两种方式去限制IP访问,第一种是最简单的方便的,第二种是通过过滤器来限制访问. ...

  5. java 重定向 redirect_详解Java从后台重定向(redirect)到另一个项目的方法

    (1)通过ModelAndView跳转 @RequestMapping("alipayforward") public ModelAndView alipayforward(Htt ...

  6. java中断runnable_详解Java 线程中断

    一.前言 大家肯定都使用过 Java 线程开发(Thread / Runnable),启动一个线程的做法通常是: new Thread(new Runnable( @Override public v ...

  7. java字符编码详解_Java中字符编码格式详解

    一.前言 在分析Comparable和Comparator的时候,分析到了String类的compareTo方法,String底层是用char[]数组来存放元素,在比较的时候是比较的两个字符串的字符, ...

  8. Java System类详解

    System 类位于 java.lang 包,代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部.由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是 ...

  9. java tcp demo_详解Java使用TCP实现数据传输实例

    这篇文章主要介绍了Java使用TCP实现数据传输实例详解的相关资料,需要的朋友可以参考下 Java使用TCP实现数据传输实例详解 TCP所提供服务的主要特点: 1.面向连接的传输: 2.端到端的通信: ...

最新文章

  1. 人脸检测--Grid Loss: Detecting Occluded Faces
  2. FPGA之道(3)数字系统之间的接口电平标准
  3. 怎样编写测试类测试分支_测试技巧–不编写测试
  4. [导入]完成可脚本调用的视频录制控件
  5. 利用卷积自编码器对图片进行降噪
  6. c/c++实现二叉树的创建以及前中后序遍历
  7. Python识别图片中的文字
  8. Python小白的数学建模课-20.网络流优化案例
  9. html和js根据年份计算年龄,JS实现根据出生年月计算年龄
  10. 新注册第一帖----------------------乱码新手自学.net 之Linq 入门篇
  11. SaaS(软件即服务)的魅力
  12. MATLAB实现光谱曲线包络线去除,附源代码
  13. 内积空间中向量正交的定义
  14. 明朝崇祯十年丁丑科状元刘同升后裔在松滋
  15. php中调整图片大小,php 调整图片尺寸的简单示例
  16. Tomcat 配置与部署
  17. 线性代数[初等变换(一)]
  18. 高级OWI与ORACLE性能调整读书笔记之UPDATE/UPADTE引起的buffer busy wait
  19. 修改计算机MAC地址
  20. 用Python实现冰雹猜想(3n+1猜想,角谷猜想,叙古拉猜想)的黑洞演示

热门文章

  1. 读入10个数,显示互不相同的数的数目,并以输人的顺序输出
  2. java程序的调试过程
  3. 刷bios工具_微星主板怎么更新bios版本?微星主板更新BIOS版本图文教程
  4. java ssm框架 缓存_SSM框架之Mybatis(7)延迟加载、缓存及注解
  5. 客座编辑:杜小勇(1963-),男,博士,中国人民大学信息学院教授、博士生导师。...
  6. WPF实现TextBox水印效果
  7. Intel 10nm为何迟迟不肯露面?良品率偏低
  8. 从一个简单的Java单例示例谈谈并发
  9. I.MX6 mkuserimg.sh hacking
  10. 自创小插件让emacs支持工程项目