Synchronized 详解(一)

在C程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作。在Java中除了提供Lock API外还在语法层面上提供了synchronized关键字来实现互斥同步原语,本文将对synchronized关键字详细分析。 

带着问题去理解Synchronized

提示

  • 请带着这些问题继续后文,会很大程度上帮助你更好的理解synchronized。
  • Synchronized可以作用在哪里?分别通过对象锁和类锁进行举例。
  • Synchronized本质上是通过什么保证线程安全的?分三个方面回答:加锁和释放锁的原理,可重入原理,保证可见性原理。
  • Synchronized由什么样的缺陷?Java Lock是怎么弥补这些缺陷的,
  • Synchronized和Lock的对比,和选择?
  • Synchronized在使用时有何注意事项?
  • Synchronized修饰的方法在抛出异常时,会释放锁吗?.
  • 多个线程等待同一个Synchronized锁的时候,JM如何选择下一个获取锁的线程?
  • Synchronized使得同时只有一个线程可以执行,性能比较差,有什么提升的方法?
  • 我想更加灵活的控制锁的释放和获取(现在释放锁和获取锁的时机都被规定死了),怎么办?
  • 什么是锁的升级和降级?什么是IM里的偏斜锁、轻量级锁、重量级锁?
  • 不同的JDK中对Synchronized有何优化?

Synchronized的使用

在应用Sychronized关键字时需要把握如下注意点:

  • 把锁只能同时被一个线程获取,没有获得锁的线程只能等待;
  • 每个实例都对应有自己的一把锁(this),不同实例之间互不影响;例外:锁对象是*.class以及synchronized修饰的是static方法的时候,所有对象公用同一把锁
  • synchronized修饰的方法,无论方法正常执行完毕还是抛出异常,都会释放锁

对象锁

包括方法锁(默认锁对象为this,当前实例对象)和同步代码块锁(自己指定锁对象)


代码块形式:手动指定锁定对象,也可是是this,也可以是自定义的锁
  • 示例1 

  •  示例2

 

 

方法锁形式:synchronized修饰普通方法,锁对象默认为this 

类锁

指synchronize修饰静态的方法或指定锁对象为Class对象


synchronize修饰静态方法 
  • 示例1

 

  • 示例2 
 synchronized指定锁对象为Class对象

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/508958.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【.NET Core】.NET中的流(Stream)

【.NET Core】.NET中的流(Stream) 文章目录 【.NET Core】.NET中的流(Stream)一、流(Stream)1.1 FileStream类1.2 IsolatedStorageFileStream类1.3 MemoryStream类1.4 BufferedStream类1.5 NetworkStream类…

喜迎乔迁,开启新章 ▏易我科技新办公区乔迁庆典隆重举行

2024年1月18日,易我科技新办公区乔迁庆典在热烈而喜庆的氛围中隆重举行。新办公区的投入使用,标志着易我科技将以崭新姿态迈向新的发展阶段。 ▲ 易我科技新办公区 随着公司业务的不断发展和壮大,为了更好地适应公司发展的需要,…

Cesium 3D Tiles 简介

3D Tiles 是大规模异构 3D 地理空间数据集(例如点云、建筑物和摄影测量)的开放标准。3D Tiles 基于 glTF 和其他 3D 数据类型构建,是一种可类似二维瓦片模式的流式传输的优化格式,旨在适应当今不断增长的 3D 地理空间数据集的渲染…

ControlNet作者新作LayerDiffusion,让SD直接生成生成透明图像,堪比商用抠图软件

ControlNet作者又出新工作,这次的工作LayerDiffusion它使得大规模预训练的Stable Diffusion能够生成透明图像。该方法允许生成单个透明图像或多个透明图层,效果堪比商业产品Adobe Stock。而且LayerDiffusion和ControlNet一样支持基于SD微调的模型。 &quo…

【基于Matlab GUI的语音降噪系统设计】

客户不要了,挂网上吧,有需要自行下载~ 赚点辛苦费 ** 功能实现: ** 1、导入音频文件/录入音频,能实现播放功能。 2、对导入/录入的音频信号进行时域和频域分析,并制图。 3、可在导入/录入的音频信号上加入噪声,并能够播…

【外汇天眼】外汇交易风险预警:吊销牌照与高风险平台一览

监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…

Tomcat服务部署优化

目录 一.Tomcat的基本内容 1.概念 2.构成 (1)web容器 (2)servlet容器(catalina) (3)JSP容器 3.Tomcat顶层架构 (1)Tomcat中最顶层的容器是Server&…

【Matlab深度学习】详解matlab深度学习进行时间序列预测

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

【大厂AI课学习笔记NO.59】(12)过拟合与欠拟合

拟合就是调整参数和模型,让结果无限接近真实值的过程。 我们先来了解个概念: 偏差-方差窘境(bias-variance dilemma)是机器学习中的一个重要概念,它涉及到模型选择时面临的权衡问题。 偏差(Bias&#xf…

第二天 Kubernetes落地实践之旅

第二天 Kubernetes落地实践之旅 本章学习kubernetes的架构及工作流程,重点介绍如何使用Workload管理业务应用的生命周期,实现服务不中断的滚动更新,通过服务发现和集群内负载均衡来实现集群内部的服务间访问,并通过ingress实现外…

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示应用

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍TM1638键盘数码管模块概述TM1638键盘数码管…

板子合集1.0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/JK01WYX/ 文章目录 1.快速幂板子2.gcd得最大公约数3.堆优化的dijkstra板子4.线段树1板子 区间加线段…