sleep() wait() yield() join()
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()相关推荐
- Java中sleep,wait,yield,join的区别
sleep() wait() yield() join()用法与区别 1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放"锁标志".不推荐使用. slee ...
- 线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
点击上方"Coder编程",选择"置顶公众号" 技术文章第一时间送达! 并发编程.png 每天进步一点,不做curd工程师与Api调用工程师 欢迎访问 个人博客 ...
- Java线程中wait、await、sleep、yield、join用法总结
文章目录 一.wait().notify().notifyAll()用法 二.await().signal().signalAll()用法 三 .yield().join()用法 四.wait().a ...
- Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数
Thread.yield()方法表示交出主动权,join表示等待当前线程,可以指定秒数 学习了:http://www.importnew.com/14958.html 膜拜一下 源码膜拜: Threa ...
- java高并发程序设计1-线程停下来(stop,wait,suspend,await,interrupt,join,yield,sleep)的操作
写这一篇是因为这几个操作的使用和场景我也经常会记不住,所以写下这一篇文章来记录以后忘了可以翻一翻 1.第一组:被抛弃的stop,suspend stop: 如果你查看JDK中的Thread线程提供的s ...
- Java多线程的11种创建方式以及纠正网上流传很久的一个谬误
创建线程比较传统的方式是继承Thread类和实现Runnable,也可以用内部类,Lambda表达式,线程池,FutureTask等. 经常面试会问到继承Thread类和实现Runnable的区别,然 ...
- 文档自动摘要及案例实现
文档自动摘要及案例实现 自动摘要的python实现: 以小说射雕英雄传中的第一段为例: import pandas as pd raw = pd.read_table('../data/金庸-射雕英雄 ...
- java中我爱你_Java线程学习(转)
编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:s ...
- Python练习1-文档格式化成html
文档格式化成HTML 把文档格式化成了THML,并没有处理所有thml规则,只是处理了一部分,功能不重要,重要的是复习熟悉下Python对文档的处理细节.毕竟Python大多数给我的印象都是处理文档. ...
最新文章
- arduino 控制无刷电机_智能控制轮椅来了,残疾人的福音!
- python免安装环境 linux_python如何打包脚本(库也一起打包),直接在linux环境运行,不需要安装库?...
- 用TensorFlow实现自编码器Autoencoders
- maven初学者常见错误汇总(三)
- mysql 多数据库实例_Mysql多实例安装
- oracle块空间的使用,Oracle管理存储架构(二)--Oracle管理数据块空间
- windows 64位 安装mvn提示 不是内部或外部命令
- Linux杂碎2/SHELL
- __attribute__((section(name))) study again
- mybatis 增删改查测试
- 年薪201万!华中科大AI博士生入选华为天才少年计划!
- git21天打卡day3-创建仓库
- JavaWeb项目—— 博客系统
- 小区外的蒸米粉和Linux RCU锁
- 一个中高级PHP工程师所应该具备的能力
- Python学习记录-实战一、车牌归属地
- 内蒙古大学计算机学院保研到哪些学校,关于2021年推荐优秀应届本科毕业生免试攻读研究生的通知...
- 图论Graph Theory:福尔福特森算法 Ford-Fulkerson
- 不可不知!4种常见的黑客攻击手段
- Windows日志浅析
热门文章
- (?i) 和 re.sub
- MySQL Spatial Extensions 地理信息
- oralce中的dual详解
- Dying In The Sun
- annotationprocessor 提示找不到类_StackOverflow上87万访问量的问题:什么是“找不到符号”?...
- linux新建脚本文件,linux shell脚本编程2—修改文件时间和创建新文件即touch命令的使用...
- python遍历数组冒泡排序_Python算法(一) 数组冒泡排序(难度等级:easy)
- java大整数_java处理大整数
- R语言 相关分析和典型相关分析
- web前端开发,自学的流程可以怎样?