2019独角兽企业重金招聘Python工程师标准>>>

sleep() wait() yield() join() 博客分类: java

sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。

当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。

waite()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在 synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non- synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。

1.sleep()方法

在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。

sleep()使当前线程进入阻塞状态,在指定时间内不会执行。

如果在synchronized 同步块中,其他线程仍然不能访问共享数据。

2.wait()方法

在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。

当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。

唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。

waite()和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。

3.yield方法

暂停当前正在执行的线程对象。

yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

yield()只能使同优先级或更高优先级的线程有执行的机会。

4.join方法

等待该线程终止。

等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。

转载于:https://my.oschina.net/xiaominmin/blog/1597997

sleep() wait() yield() join()相关推荐

  1. Java中sleep,wait,yield,join的区别

    sleep() wait() yield() join()用法与区别 1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放"锁标志".不推荐使用. slee ...

  2. 线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)

    点击上方"Coder编程",选择"置顶公众号" 技术文章第一时间送达! 并发编程.png 每天进步一点,不做curd工程师与Api调用工程师 欢迎访问 个人博客 ...

  3. Java线程中wait、await、sleep、yield、join用法总结

    文章目录 一.wait().notify().notifyAll()用法 二.await().signal().signalAll()用法 三 .yield().join()用法 四.wait().a ...

  4. Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数

    Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数 学习了:http://www.importnew.com/14958.html 膜拜一下 源码膜拜: Threa ...

  5. java高并发程序设计1-线程停下来(stop,wait,suspend,await,interrupt,join,yield,sleep)的操作

    写这一篇是因为这几个操作的使用和场景我也经常会记不住,所以写下这一篇文章来记录以后忘了可以翻一翻 1.第一组:被抛弃的stop,suspend stop: 如果你查看JDK中的Thread线程提供的s ...

  6. Java多线程的11种创建方式以及纠正网上流传很久的一个谬误

    创建线程比较传统的方式是继承Thread类和实现Runnable,也可以用内部类,Lambda表达式,线程池,FutureTask等. 经常面试会问到继承Thread类和实现Runnable的区别,然 ...

  7. 文档自动摘要及案例实现

    文档自动摘要及案例实现 自动摘要的python实现: 以小说射雕英雄传中的第一段为例: import pandas as pd raw = pd.read_table('../data/金庸-射雕英雄 ...

  8. java中我爱你_Java线程学习(转)

    编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:s ...

  9. Python练习1-文档格式化成html

    文档格式化成HTML 把文档格式化成了THML,并没有处理所有thml规则,只是处理了一部分,功能不重要,重要的是复习熟悉下Python对文档的处理细节.毕竟Python大多数给我的印象都是处理文档. ...

最新文章

  1. arduino 控制无刷电机_智能控制轮椅来了,残疾人的福音!
  2. python免安装环境 linux_python如何打包脚本(库也一起打包),直接在linux环境运行,不需要安装库?...
  3. 用TensorFlow实现自编码器Autoencoders
  4. maven初学者常见错误汇总(三)
  5. mysql 多数据库实例_Mysql多实例安装
  6. oracle块空间的使用,Oracle管理存储架构(二)--Oracle管理数据块空间
  7. windows 64位 安装mvn提示 不是内部或外部命令
  8. Linux杂碎2/SHELL
  9. __attribute__((section(name))) study again
  10. mybatis 增删改查测试
  11. 年薪201万!华中科大AI博士生入选华为天才少年计划!
  12. git21天打卡day3-创建仓库
  13. JavaWeb项目—— 博客系统
  14. 小区外的蒸米粉和Linux RCU锁
  15. 一个中高级PHP工程师所应该具备的能力
  16. Python学习记录-实战一、车牌归属地
  17. 内蒙古大学计算机学院保研到哪些学校,关于2021年推荐优秀应届本科毕业生免试攻读研究生的通知...
  18. 图论Graph Theory:福尔福特森算法 Ford-Fulkerson
  19. 不可不知!4种常见的黑客攻击手段
  20. Windows日志浅析

热门文章

  1. (?i) 和 re.sub
  2. MySQL Spatial Extensions 地理信息
  3. oralce中的dual详解
  4. Dying In The Sun
  5. annotationprocessor 提示找不到类_StackOverflow上87万访问量的问题:什么是“找不到符号”?...
  6. linux新建脚本文件,linux shell脚本编程2—修改文件时间和创建新文件即touch命令的使用...
  7. python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)
  8. java大整数_java处理大整数
  9. R语言 相关分析和典型相关分析
  10. web前端开发,自学的流程可以怎样?