释放同步监视器的锁定(java疯狂讲义)

任何线程进入同步代码块、同步方法之前,必须先获得对同步监视器的锁定,那么何时会释放对同步监视器的锁定呢?程序无法显示释放对同步监视器的锁定,线程会在如下几种情况下释放对同步监视器的锁定。

1、当前线程的同步方法、同步代码块执行结束,当前线程即释放同步监视器。

2、当前线程在同步代码块、同步方法中遇到break、return终止了该代码块、该方法的继续执行,当前线程将会释放同步监视器。

3、当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致了该代码块、该方法异常结束时,当前线程会释放同步监视器。

4、当前线程执行同步代码块或同步方法时,程序执行了同步监视器对象的wait()方法,则当前线程暂停,并释放同步监视器。

 

在如下所示的情况下,线程不会释放同步监视器:

1、线程执行同步代码块或同步方法时,程序调用了Thread.sleep()、Thread.yield()方法来暂停当前线程的执行,当前线程不会释放同步监视器。

2、线程执行同步代码块时,其他线程调用了该线程的suspend()方法将线程挂起,该线程不会释放同步监视器。当然,我们应该尽量避免使用suspend()和resume()方法来控制线程。

转载于:https://www.cnblogs.com/teng-IT/p/4449598.html

华为OD机试真题 新系统【小花获胜的奶茶】 华为OD机试真题 新系统【小花获胜的奶茶】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小花获胜的奶茶】多语言题解。 阅读详情

相关推荐

EDA的未来:当AI与Cadence Virtuoso相遇

本文探讨了AI技术与Cadence Virtuoso在EDA领域的融合,展示了如何通过生成式AI提升芯片设计效率。文章详细分析了Virtuoso设计环境的智能化演进、AI驱动的设计辅助功能实现路径,以及SKILL语言的进化方向,为工程师提供了未来EDA工具的发展趋势和实用案例。

weixin_28312391的博客 654

java中多线程知识点 ---- 同步监视器的释放、同步锁

线程在进入同步代码块、同步方法之前必定要获取同步监视器的掌控权,也就是当前同步监视器必须要先被之前的线程所释放. 那同步监视器在什么时候被线程释放? 当线程在以下情况会释放同步监视器 在同步方法、同步代码块中 两处执行完毕 线程调用线程wait()方法时,线程会释放当前所拥有的同步监视器 出现未处理的Error或者异常,当前线程被暂停,同时释放同步监视器 遇到break、return关键词时,代...

weixin_44363770的博客 376

【阅读文献笔记】FoundationStereo: Zero-Shot Stereo Matching

提出首个零样本泛化立体匹配基础模型设计 STA 模块融合单目先验提出 AHCF 模块增强代价滤波构建 100 万合成数据集 FSD + 自净化流程。

qq_46460379的博客 1258

同步监视器锁定的释放问题

在任何编程语言中,事关线程安全问题非常重要,而同步监测器是解决java多线程安全问题的关键,关于监测器锁定的释放时机对于程序的运行效率以及多线程的兵法效率至关重要。 任何线程进入同步代码块、同步方法之前,必须先获得对于同步监测器的锁定,那么合适释放对同步监测器的锁定呢?在Java中,程序无法显式的释放对同步监测器的锁定,JVM会从释放机制中自动的释放,下面看看都是在什么情况下会进行同步监测器

机器学习算法与Python学习 936

绿联UGOS Pro系统虚拟机部署Windows 11详细教程(跳账户登录,安装内存驱动)

总的来说,此次的虚拟机部署Windows 11出现的问题应该是目前几乎所有虚拟机都可能出现的问题,和绿联是没有关系的。所以说如果你在其它NAS上虚拟机部署Windows 11系统如果出现同样的问题,那么今天教程的方案也同样适用于你。

qq_63499861的博客 1万+

2.6 SST的核心性能指标体系

本文构建了固态变压器(SST)的核心性能指标体系,涵盖电气性能、可靠性、经济性和环境适配性四大类指标。电气性能指标包括运行效率(≥97%)、功率密度(≥900kVA/m³)、谐波畸变率(≤3%)等关键参数;可靠性指标设定MTBF≥43800h、年均故障率≤1.2次/年等标准;经济性指标对比分析了初始购置成本(45-55万元)和全生命周期成本(48-55万元);环境适配性指标则明确了温度、海拔等工况要求。该体系采用量化公式和国标限值,为SST的性能测试、选型和优化提供了统一标准。

技术工作者 606

线程(二)

创建线程有几种方式?哪种受欢迎 为什么? 有三种方式可以创建线程:继承Thread类、实现Runnable接口、应用程序可以使用Executor框架来创建线程池 实现Runnable接口这种方式更受欢迎,因为这个不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承,但Java不支持多继承,所以只能实现接口。同时线程池也是非常高效的,很容易实现和使用 Java多线程回调是什么意思? 所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对

weixin_44387195的博客 764

闲鱼客户端三重动态签名机制解析:x-sign、x-mini-wua与x-umt

在移动客户端安全通信中,设备级动态签名已成为主流App防范自动化攻击的核心手段。其原理是将设备指纹、运行时行为与可信硬件标识深度融合,生成不可复用、不可跨端、不可静态伪造的请求凭证。这类机制超越传统Token或Session鉴权,具备强上下文绑定性与实时熵值校验能力,广泛应用于电商、社交及开放平台等高风险接口场景。技术价值体现在有效识别模拟器、无头浏览器与集群化爬虫,同时保障多端一致性与合规数据对接。本文聚焦闲鱼客户端实际落地的x-sign(带设备上下文的混合签名)、x-mini-wua(小程序行为水印)与

weixin_35732273的博客 498

监视器–JAVA同步基本概念

原文链接  作者:X Wang  译者:candy 大学有一门课程叫操作系统,学习过的同学应该都记得,监视器是操作系统实现同步的重要基础概念,同样它也用在JAVA的线程同步中,这篇文章用一种类推的思想解释监视器”monitor”。 1.什么是监视器 监视器可以看做是经过特殊布置的建筑,这个建筑有一个特殊的房间,该房间通常包含一些数据和代码,但是一次只能一个消费者(thread

那些年 1406

中科大大数据学院2023年保研夏令营机试题目【无offer,直接放题了~】(2023.07.22下午14:35-17:35考试)

给定一串数字,最后一个数是0表示结尾,表示数字串的终止,为无效数字。将该数字串存储在双向链表中,判断是否为回文串,若是,则输出Yes,否则输出No.

m0_51339444的博客 1922

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1994

java多线程同步(wait、notify)生产者消费者简单示例

一、为何写最为一个Android开发者,如果做得不够深入可能为不会去处理多线程同步的问题,稍微简单点可能使用一个线程池就可以搞定了,有关线程池的介绍可以参考我的另一篇文章:ExecutorService+LruCache+DiskLruCache用一个类打造简单的图片加载库 只是前段时间研究Android音视频硬解码,看到开源项目中用到了线程同步,就是在视频的YUV数据的暂存,和解码为视频并展示,

Dawish的专栏 2442

9、硬件工程师笔试面试知识器件篇——三极管(2025版本)

本文全面介绍了三极管的基础知识与应用,包括其结构、类型、工作原理、工作状态、功能、应用场景及特性参数。详细探讨了三极管在信号放大、无线通信、音频设备及医疗设备中的具体应用,并深入分析了设计放大电路时如何平衡增益与噪声、优化偏置电路以提高稳定性、使用负反馈改善性能等关键问题。此外,文章还涵盖了高频电路设计、温度补偿策略、电磁干扰防护等实用内容,为硬件工程师提供了全面的技术参考和设计指导。

XU157303764的博客 7314

线程的基础知识(四)

本博客整理来源于《疯狂java讲义》。 线程同步 因为run()方法的方法体不具有同步安全性,为了解决这个问题,Java的多线程引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块。格式如下: synchronized (obj) { ... //同步代码块 } 任何时刻只有一个线程可以获得对同步监视器的锁定,当同步代码块执行完毕后,该线程会释放对该同步监...

手写ArrayList 132

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[疯狂Java]线程同步:同步监视器、同步方法、同步锁、死锁

1. 并发访问带来的线程安全问题:     1) 设想当多个线程刚好在同时时间访问一个公共资源时会怎么样?     2) 如果仅仅是读取那个资源那没什么问题,但如果要修改呢?同时修改必然会发生冲突导致数据不一致的错误(最典型的就是同时写一个文件);     3) 在实际问题中最典型的就是银行取钱问题,如果多人刚好同时用同一个账号取钱就会发生错误,而这种错误往往是非常严重的错误;     4

Lirx_Tech的专栏 5588

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

多线程05:《疯狂Java讲义》学习笔记——线程同步

(1)同步代码块;(2)同步方法;(3)释放同步监视器的锁定;(4)同步锁(Lock);(5)死锁

瀚海银河孤星泪的博客 741

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

通过简单的死锁实例来理解同步监视器与死锁

在介绍死锁的概念之前,首先对线程的生命周期进行复习。 线程的生命周期 新建:Thread thread=new Thread();,用new关键字创建一个线程后,构造方法中将当前thread对象加入ThreadGroup,虚拟机为其分配内存。 就绪:调用线程实例的start(),JVM为其创建方法调用栈和程序计数器,线程何时开始运行取决于JVM里线程调度器的调度。 阻塞:如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个

韩云昊的菜园 252

同步块和同步监视器

同步块 synchronized(Obj){} Obj被称为同步监视器 Obj可以是任何对象,但是推荐使用共享资源作为同步监视器 同步方法中无需指定同步监视器,因为同步方法的同步监视器是this,就是这个对象本身,或者是class 同步监视器执行过程 第一个线程访问,锁定同步监视器,执行其中代码 第二个线程访问,发现同步监视器被锁定,无法访问 第一个线程访问完毕,解锁同步监视器 第二个线程访问,发现同步监视器没有锁,然后锁定并访问

m0_46406255的博客 759

java中,synchronized释放锁的时机

任何线程进入同步代码块、同步方法之前,必须获得同步监视器的锁定,那么何时会释放这个锁定呢?在程序中,是无法显式释放对同步监视器的锁的,而会在如下几个情况下释放锁。 1、当前线程的同步方法、代码块执行结束的时候释放 2、当前线程在同步方法、同步代码块中遇到break 、 return 终于该代码块或者方法的时候释放。 3、。。。。出现未处理的error或者exception导致异常

yuanzhanli的博客 1万+

实现多线程同步Lock锁与 synchronized 同步监视器的区别`

实现多线程同步Lock锁与 synchronized 同步监视器的区别` 线程同步的关键: 确保一个时间点只有一个线程访问共享资源。可以给共享资源加一把锁,哪个线程获取了这把锁,才有权利访问该共享资源。 1.同步监视器 同步监视器可以是任何对象,必须唯一,保证多个线程获得是同一个对象(锁). 同步监视器的执行过程 1.第一个线程访问,锁定同步监视器,执行其中代码. 2.第二个线程访问,发现同步监视器被锁定,无法访问. 3.第一个线程访问完毕,解锁同步监视器. 4.第二个线程访问,发现同步监视器没有锁,然后锁

qq_27496139的博客 636

《疯狂Java讲义(第4版)》-----第16章【多线程】(控制线程、线程同步)

控制线程 join线程 等那个线程做完后,当前线程再做! import java.lang.Thread; public class MyThread extends Thread{ public MyThread(String name){ super(name); } public void run(){ for(int i = 0; i < 4; i++){ ...

ccnuacmhdu的博客 1090

同步监视器

同步块和同步监视器

m0_46406255的博客 381

java同步锁实例_Java同步锁全息详解

一 同步代码块1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块。其语法如下:synchronized(obj){//同步代码块}其中obj就是同步监视器,它的含义是:线程开始执行同步代码块之前,必须先获得对同步监视器的锁定。任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视...

weixin_35739886的博客 302

《疯狂java讲义》学习(44):线程同步

1线程同步 多线程编程是有趣的事情,它很容易突然出现“错误情况”,这是有系统的线程调度具有一定的随机性造成的,不过即使程序偶然出现问题,那也是由于编程不当引起的。当使用多个线程来访问同一个数据时,很容易“偶然”出现线程安全问题。 1.1线程安全问题 关于线程安全问题,有一个经典的问题——银行取钱的问题。银行取钱的基本流程基本上可以分为如下几个步骤。 用户数据账户、密码,系统判断用户的账户、密码是...

泛泛之素 628

Java高并发编程-同步监视器

释放同步监视器的锁定 (1)流程执行结束 (2)在同步代码块中遇到了break,return (3)在 什么情况下不会释放锁 死锁与阻塞的区别

刷穿算法!!!! 197

对synchronized(参数)里参数即同步监视器的理解

在学习java线程同步的时候,总感觉同步监视器是多余的,因为既然已经用synchronize对代码块进行了锁定,那么传的参数还有什么意义? 首先,在语法上,该参数可为任意对象。 但是在实际项目中必须慎重选取同步监视器,我认为同步监视器实质上应该是“放锁的位置”。 1、对代码区域进行synchronize(同步监视器)处理后,所有进入该代码块区域的线程必须去“看看”同步监视器上有没有“放置”锁,如果...

java1592724884的博客 1077
上一篇: 线程问题求教!谢谢
下一篇: 同步锁(lock)
aixirang3421
博客等级 码龄11年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值