java锁关键字sychronized

前置知识

在HotSpot虚拟机中,对象在内存中存储可分为三块区域:

  1. 对象头:有MarkWord和Klass Word组成
  2. 实例数据:里面主要是成员变量
  3. 对齐填充:不是8的整数倍,则填充

CAS:
Compare and Swap是Java中的一种重要的并发控制机制,属于乐观锁范畴(自旋锁重试机制,就算别的线程修改了,可以重新来一遍)。CAS操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)。其基本原理是,先读取内存中的值,然后比较该值是否等于期望值,如果相等则将内存中的值更新为新值,否则不做任何操作。这个比较和更新的操作是原子性的,因此可以在多线程环境下保证数据的一致性和完整性。底层一般为native类型,由C++或C实现。

正文如下:
java中sychronized关键字(悲观锁)有3种锁类型

  • 轻量级锁:对应不同线程交替执行持有锁,线程加锁的时间段不同,也就是说没有竞争,轻量级锁修改了对象头的锁标志,相对重量级锁性能提升了很多,每次都是CAS操作,保证了原子性。每个线程的栈帧都会包含一个Lock Record的结构,内部可以存储锁定对象的Mark Word,让Lock Record中的Object reference指向锁对象,并尝试用CAS操作来将该对象的Mark Word更新为指向Lock Record的指针。这样,当对象被轻量级锁定时,其Mark Word实际上指向的是Lock Record。简而言之,Lock Record是Java轻量级锁机制中的一个组成部分,用于在锁定对象时记录相关信息,从而实现线程安全的并发控制。
  • 偏向锁:对应一段很长时间内只被一个线程使用锁,在第一次获取锁时,会有一个CAS操作,之后线程再获取锁,只需判断mark word是否是自己的线程id即可,而不是执行开销较大的CAS命令。
  • 重量级锁:适用于多个线程竞争比较激烈的情况,底层用Monitor实现,里面涉及到用户态和内核态的切换,进程的上下文切换,实现成本较高,性能比较低。

需要注意的是,这些锁状态并不是直接暴露给Java程序员的,而是JVM内部根据线程竞争情况和优化策略自动调整的。一般Java程序员通常只需关注synchronized关键字的使用。

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

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

相关文章

3.24 day3 QT

使用手动连接,将登录框中的取消按钮使用ot4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断u界面上输入的账号是否为"admin",密码是否为&…

video/pdf文件预览与进度上传

video 视频文件直接使用video标签预览&#xff0c;和后端设定的是学员在观看视频时&#xff0c;前端会5秒钟上传一次进度&#xff0c;记录学员当前视频所学的进度&#xff0c;当视频观看完成时会立即触发一次进度上报接口。 <videoref"video":src"xxxxx&quo…

03-SparkSQL入门

0 Shark Spark 的一个组件&#xff0c;用于大规模数据分析的 SQL 查询引擎。Shark 提供了一种基于 SQL 的交互式查询方式&#xff0c;可以让用户轻松地对大规模数据集进行查询和分析。Shark 基于 Hive 项目&#xff0c;使用 Hive 的元数据存储和查询语法&#xff0c;并基于Hiv…

状态机高阶讲解-10

1896 01:19:16,700 --> 01:19:19,550 那接下来我们就开始来建模了 1897 01:19:20,690 --> 01:19:22,163 那建模的开始呢 1898 01:19:22,163 --> 01:19:24,900 我们就首先要添加一个类了 1899 01:19:26,330 --> 01:19:27,868 那我们这个很简单 1900 01:19:27,86…

力扣100热题[哈希]:最长连续序列

原题&#xff1a;128. 最长连续序列 题解&#xff1a; 官方题解&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;题解&#xff0c;最长连续序列 &#xff1a;哈希表 官方解题思路是先去重&#xff0c;然后判断模板长度的数值是否存在&#xff0c;存在就刷新&#xff0c…

js教程(8)

一、事件流 1.概述 在JavaScript中&#xff0c;事件流描述的是事件在DOM结构中传播和被处理的顺序。事件流分为冒泡阶段和捕获阶段。 冒泡阶段&#xff08;Bubbling Phase&#xff09;&#xff1a;事件首先从最内层的元素开始向父级元素传播&#xff0c;一直传播到最外层的元素…

论文:Scalable Zero-shot Entity Linking with Dense Entity Retrieval翻译笔记(实体链接)

文章目录 论文标题&#xff1a;通过密集实体检索实现可扩展的零镜头实体链接摘要1 引言2 相关工作3 定义和任务制定4 方法4.1 双编码器4.2 交叉编码器4.3 知识蒸馏 5 实验5.1 数据集5.2 评估设置和结果5.2.1 零点实体链接5.2.2 tackbp-20105.2.3 WikilinksNED Unseen-Mentions …

c++常考基础知识(2)

二.c关键字 关键字汇总 c中共有63个关键字&#xff0c;其中包括int&#xff0c;char&#xff0c;double等类型关键字&#xff0c;if&#xff0c;else&#xff0c;while&#xff0c;do&#xff0c;等语法关键字&#xff0c;还有sizeof等函数关键字。 三.数据结构 1.数组&#x…

阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】

文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路BERT代码 学习过程 20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析)&#xff0c;一开始看这块其实挺懵的&#xff0c;不会就去问百度或其他人&#xff0c;当时遇见困难挺害怕的…

web渗透测试漏洞流程:渗透目标信息收集

web渗透测试漏洞流程 1.1 企业目标信息的确认1.2 企业目标信息的收集1.2 企业目标信息的列表1.2.1 企业基本信息的收集1.2.1.1 企业信息收集框架1.2.1.2 企业员工信息收集1.2.1.3 企业信息查询网站1.2.1.4 企业备案信息查询网站1.2.1.5 企业信用信息查询1.2.1.6 企业相关APP应用…

python 画出函数图像

sinx from matplotlib import pyplot as plt import numpy as np import math xlist(np.arange(-math.pi, math.pi,0.1))#此处可调整自变量取值范围&#xff0c;以便选择合适的观察尺度 y[] for i in range(len(x)):y.append(math.sin(x[i])) plt.plot(x,y) plt.show()arcsinx…

一键入门Ubuntu22!

目录 一、安装 二、常用目录 三、常用指令 四、用户指令 五、ssh与scp 六、服务相关 七、Python与Pycharm 八、Vim编辑器 九、Ubuntu22下使用Mysql 十、Ubuntu22下使用mongodb 十一、Ubuntu22下使用redis Ubuntu是一个基于Debian的开源操作系统&#xff0c;由Canoni…

Java 自定义线程池实现

自定义线程池 简介任务图示阻塞队列 BlockingQueue<T>ReentrantLock代码 线程池 ThreadPool工作线程类 Worker 拒绝策略接口代码测试类 TestThreadPool为什么需要j i&#xff1f;&#xff08;lambad表达式相关&#xff09; 测试结果拒绝策略&#xff1a;让调用者自己执行…

求解线性方程组

如图题意看出x1有且仅有两种可能&#xff0c;1或者0&#xff0c;且知道了所有a的值&#xff0c;且因为要求所得答案字典序最小&#xff0c;所以先假设x10。 又因a2x1x2所以可以求出x2的值&#xff0c;又如a2x1x2x3,所以可以求出x3的值依次求出所有x的值&#xff0c;但每求出一…

20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数

20.从入门到精通:参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数 参数位置参数关键字参数默认参数 匿名函数return 语句强制位置参数 参数 在Python中&#xff0c;函数可以接受任意数量的参数&#xff0c;包括位置参数、关键字参数和默认参数。以下是这…

卷积神经网络基础

卷积层 1.可参考此文章&#xff1a;https://blog.csdn.net/tjlakewalker/article/details/83275322 2.实现代码: import torch.nn as nn conv nn.Conv2d(in_channels3, #输入通道out_channels64, #输出通道kernel_size3, #卷积核stride1) #步长 print(conv) # 结…

Optional 的用法

常见的有三种方法创建Optional 创建一个为空的optional实例 Testpublic void test_create_empty_optional() {Optional<String> empty Optional.empty();Assert.assertFalse(empty.isPresent());} 用of 创建的Option实例必须为非空&#xff0c;用ofNullable创建的Opti…

SpringCloud-记

目录 什么是SpringCloud 什么是微服务 SpringCloud的优缺点 SpringBoot和SpringCloud的区别 RPC 的实现原理 RPC是什么 eureka的自我保护机制 Ribbon feigin优点 Ribbon和Feign的区别 什么是SpringCloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发…

2024/3/24周报

文章目录 摘要Abstract文献阅读题目引言创新点数据处理研究区域和数据缺失值处理水质相关分析 方法和模型LSTMAttention机制AT-LSTM模型 实验结果 深度学习transformer代码实现1 模型输入1.1 Embedding层1.2 位置编码 2 Encoder2.1 编码器2.2 编码器层2.3注意力机制2.4多头注意…

hive SQL 移位、运算符、REGEXP正则等常用函数

orderflag & shiftleft(1,14) shiftleft(1,14) SQL中使用的运算符号详解_sql中各种符号-CSDN博客 Hive函数_hive shift-CSDN博客 &#xff08;内建函数&#xff08;类型排序&#xff09;_云原生大数据计算服务 MaxCompute(MaxCompute)-阿里云帮助中心&#xff09;