Java中哪些操作会使线程释放锁资源
1.sleep()方法
在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。
sleep()使当前线程进入阻塞状态,在指定时间内不会执行。
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则会执行完毕,导致结果不可预测。
join()底层就是调用wait()方法的,wait()释放锁资源,故join也释放锁资源
1.sleep会使当前线程睡眠指定时间,不释放锁
2.yield会使当前线程重回到可执行状态,等待cpu的调度,不释放锁
3.wait会使当前线程回到线程池中等待,释放锁,当被其他线程使用notify,notifyAll唤醒时进入可执行状态
4.当前线程调用 某线程.join()时会使当前线程等待某线程执行完毕再结束,底层调用了wait,释放锁
Java中哪些操作会使线程释放锁资源相关推荐
- 【Java】哪些操作会使线程释放锁资源
1.sleep()方法 在指定时间内让当前正在执行的线程暂停执行,但不会释放"锁标志".不推荐使用. sleep()使当前线程进入阻塞状态,在指定时间内不会执行. 2.wait() ...
- Java中CAS操作详解
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. (2 ...
- JAVA中的多线程(八):线程的优先级和yield方法
JAVA中的多线程(八):线程的优先级和yield方法 优先级代表着抢资源的频率 所有线程默认优先级是5 yield()临时释放线程的执行权 1 class Demo implements Runna ...
- Java中CAS操作本身怎么保证原子性及其原理分析
Java中CAS操作是怎么保证原子性的? 在学习Java多线程时我们会接触到CAS这样一个概念,CAS其实就是Compare And Swap的一个缩写.Compare And Swap,顾名思义就是 ...
- java中文件,java中文件操作大全
java中文件操作大全 一.获得控制台用户输入的信息 view plaincopy to clipboardprint? / //获得控制台用户输入的信息 return throws ioexcept ...
- Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码
Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码 用一个例子来说明: 例子原理 启动一个线程A打印数字,从0打印到9,在数字等于5的时候,进入wait状态 ...
- ant java 返回,在Java中直接操作ant回测试和生成测试报告
在Java中直接操作ant来测试和生成测试报告 Ant是大家熟悉的构建工具,一般情况下,大家都是使用build.xml文件来配置使用Ant,这样的Ant已经是十分强大的.但有些怪异的场景需求特殊,你可 ...
- thread.sleep会释放锁吗_面试 LockSupport.park()会释放锁资源吗?
(手机横屏看源码更方便) 引子 大家知道,我最近在招人,今天遇到个同学,他的源码看过一些,然后我就开始了AQS连环问. 我:说说AQS的大致流程? 他:AQS包含一个状态变量,一个同步队列--bala ...
- Java基础学习系列--(七)彻底搞懂java中的【异常、线程】的使用
第一章 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中, ...
最新文章
- 夏瑞、陈程杰报告—科研神器TBtools 从“结识”到“结伴”(下午3点腾讯会议)...
- mqttnet 详解_MQTTnet 3.0.5学习笔记
- python实现一个商品管理_python编写商品管理
- 分布式服务框架Dubbo使用小结
- 小技巧:Go怎么样获取常驻内存子进程的输出
- 微信小程序毕业设计和毕业论文怎么写,答辩流程是怎样的?
- 使用PS旋转单个图层
- vue swiper click失效
- java 主项目 子项目_java web项目自动管理子项目,以及子项目打包
- 如何在网上挣钱,这几个项目让你月入过万元
- 微信小程序生成图片分享朋友圈
- linux网络入侵命令,如何使用netstat命令验证DDOS入侵
- 当我开始爱自己——卓别林
- k折交叉验证优缺点_k折交叉验证(R语言)
- 这一路走来,冷暖自知 (附算法demos)
- 运营精益创业组织的柔术
- Ceph分布式存储系列(二):ceph-deploy方式部署三节点ceph集群
- bzoj3875: [Ahoi2014Jsoi2014]骑士游戏 spfa处理有后效性动规
- Powershell 挖矿病毒处理与防范,该病毒特性:病毒每天自动运行,生成的病毒程序杀毒软件能查到,但无法阻止powershell病毒的自动运行,每天都会生成新的病毒文件
- AD原理图旋转元器件
热门文章
- 2.5万美元奖金!滴滴算法工程师详解专业赛事:2021 SIGSPATIAL GISCUP
- ECCV 2020 SenseHuman Workshop:人类感知、理解与生成
- 拉取数据_Apache Kafka-数据写入过程
- 【Java代码】道格拉斯-普克 Douglas-Peucker 抽稀算法(算法流程图解+使用JDK8方法实现+详细注解源码)
- android d-bus,android EventBus的使用
- easyui有没有html编辑器,【easyui】kindeditor富文本(html编辑器)的使用
- 有一种努力叫:靠 自 己!
- Python——基于PIL和CV2实现自动拼图解决方案
- Java Web——文件下载时中文文件名乱码问题解决方案
- c语言中逗号自加,计算机二级自加、自减运算符和逗号运算符