目录

       sleep()方法

       wait()方法

       两者的区别

       多学一点

sleep()方法

       sleep()方法是线程类(Thread)的静态方法,让调用的线程进入指定时间睡眠状态,使得当前线程进入阻塞状态,告诉系统至少在指定时间内不需要为线程调度器为该线程分配执行时间片,给执行机会给其他线程(实际上,调用sleep()方法时并不要求持有任何锁,即sleep()可在任何地方使用。),但是监控状态依然保持,到时后会自动恢复。

       当线程处于上锁时,sleep()方法不会释放对象锁,即睡眠时也持有对象锁。只会让出CPU执行时间片,并不会释放同步资源锁。

       sleep()休眠时间满后,该线程不一定会立即执行,这是因为其他线程可能正在运行而起没有被调度为放弃执行,除非此线程具有更高的优先级。

       sleep()必须捕获异常,在sleep的过程中过程中有可能被其他对象调用它的interrupt(),产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。

       在没有锁的情况下,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。

wait()方法

       wait()方法是Object类里的方法,当一个线程执行wait()方法时,它就进入到一个和该对象相关的等待池中(进入等待队列,也就是阻塞的一种,叫等待阻塞),同时释放对象锁,并让出CPU资源,待指定时间结束后返还得到对象锁。

       wait()使用notify()方法、notiftAll()方法或者等待指定时间来唤醒当前等待池中的线程。等待的线程只是被激活,但是必须得再次获得锁才能继续往下执行,也就是说只要锁没被释放,原等待线程因为为获取锁仍然无法继续执行。notify的作用只负责唤醒线程,线程被唤醒后有权利重新参与线程的调度。

       wait()方法、notify()方法和notiftAll()方法用于协调多线程对共享数据的存取,所以只能在同步方法或者同步块中使用,否则抛出IllegalMonitorStateException。

两者的区别

       (1)属于不同的两个类,sleep()方法是线程类(Thread)的静态方法,wait()方法是Object类里的方法。

       (2)sleep()方法不会释放锁,wait()方法释放对象锁。

       (3)sleep()方法可以在任何地方使用,wait()方法则只能在同步方法或同步块中使用。

       (4)sleep()使线程进入阻塞状态(线程睡眠),wait()方法使线程进入等待队列(线程挂起),也就是阻塞类别不同。

多学一点:

join()方法:

join()方法使调用该方法的线程在此之前执行完毕,也就是等待该方法的线程执行完毕后再往下继续执行。注意该方法也需要捕捉异常。

yield()方法:

该方法与sleep()类似,都是可以让当前正在运行的线程暂停,区别在于yield()方法不会阻塞该线程,它只是将线程转换成就绪状态,让系统的调度器重新调度一次,并且yield()方法只能让优先级相同或许更高的线程有执行的机会。

浅谈sleep()和wait()相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  3. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  4. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  5. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  6. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

  10. 浅谈几种区块链网络攻击以及防御方案之女巫攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/13/network_attack_of_blockchain_sybil_attack/ 写在前面的话 自比特 ...

最新文章

  1. MPB:宁大张德民组-对虾养殖系统微生物组样品的采集与制备
  2. mysql二级索引_mysql——二级索引(辅助索引)
  3. 监控软件nagios之配置文件详解
  4. python读取txt文件-python txt文件的写入和读取
  5. Docker容器原理及相关知识
  6. Ubuntu安装程序出现“Sub-process usrbindpkg returned an error code (1)”的问题
  7. mysql权限说法正确的是,【多选题】下面关于修改 MySQL 配置的说法中,正确的是...
  8. maftools|TCGA肿瘤突变数据的汇总,分析和可视化
  9. 多媒体指令(内存拷贝加速)
  10. android+qq底部界面,Android 高仿QQ 界面滑动效果
  11. VMware虚拟机安装xp系统
  12. 跨境B2B电商市场血雨腥风,供应链管理系统成争夺焦点
  13. 6个免费视频、音频素材网,视频剪辑必备
  14. 20M宽带的下载速度到时有没有20MB/s?
  15. LOGO特训营 第六节 字体设计实操(矩形钢笔造字)
  16. Linux内核4.14版本——mmc_blk层为sd card等创建、读写块设备流程
  17. 2011年09月04日
  18. uboot构建框架6-u-boot.bin生成过程追踪
  19. 顺丰官网代码(自编)
  20. 大气湍流下的少模光纤耦合

热门文章

  1. asp.net Code学习一(vs code跨平台软件操作)
  2. java 实现 内存池_从连接池到内存池
  3. apache commons math 示例代码
  4. c语言计算机图形来画八分画圆,【计算机图形学】基本图形元素:圆的生成算法...
  5. 经验之谈—报表在项目开发中的经验建议
  6. Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”
  7. Learned Index for Spatial Queries(MDM2019)
  8. Python爬虫快速入门,静态网页爬取!
  9. 质数的后代 素数筛选法
  10. Cortex M4 中断向量表