Java 并发锁

news/2025/10/7 11:27:39/文章来源:https://www.cnblogs.com/minblog/p/19128294

1 为什么要加锁

所先JVM将内存划分成2个区域

  • 主内存:所有线程共享的内存区域,存储所有的共享变量
  • 工作内存:每个线程独有的内存区域,存储该线程使用到的共享变量的副本

线程对变量的操作(读取、赋值)必须在工作内存完成,从主内存读取变量到工作内存,在对工作内存的变量进行操作,返回主内存。因此,当不同线程同时操作一个变量时,就会出现操作的数据实际值和主内存不一致。

2 需要解决那些问题

2.1 可见性问题 

  当一个共享变量被其他线程改变值后,其他线程无法立即感知到这个变量的值。

2.2 原子性

  无法确保对同一个共享变量操作是原子性的。

2.3 指令重排

  操作系统可能对一些操作指令进行重新排序,从而提高运行速度。例如一个对象赋值操作。 A a =  new A()。 单例模式时,会判断对象是否是空对象,所有要两次判断非空

  原本顺序:

    1. 分配内存空间

    2. 初始化对象

    3.  将引用指向内存

  重排序后顺序:

    1. 分配内存空间

    2. 将引用指向内存
    3. 初始化对象

2 常见锁类型

2.1 Synchronized

public class SynchronizedDemo {int i = 0;public static void main(String[] args) {SynchronizedDemo synchronizedDemo = new SynchronizedDemo();synchronizedDemo.init1();try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(synchronizedDemo.i);}public void init1() {Thread[] threads = new Thread[100];for (int i = 0; i < 100; i++) {threads[i] = new Thread(this::fun1);threads[i].start();}}/*** 方法上锁*/synchronized void fun1() {i++;}}

  

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

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

相关文章

做插画的网站网上购物哪个商城好

&#xff3b;导读&#xff3d;Kaggle 的房价预测竞赛从 2016 年 8 月开始&#xff0c;到 2017 年 2 月结束。这段时间内&#xff0c;超过 2000 多人参与比赛&#xff0c;选手采用高级回归技术&#xff0c;基于我们给出的 79 个特征&#xff0c;对房屋的售价进行了准确的预测。今…

实用指南:点评中是如何实现短信登录的

实用指南:点评中是如何实现短信登录的pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

[数学 - 方差 标准差 ]

假设和平均距离 比如两个人的射击成绩,我们要挑选一个“更加稳定”的选手:平均值相同时:假设样本数据是 \(x_1, x_2, \dots, x_n\) \(\bar{x}\) 表示这组数据的平均数。 所以,样本数据到 \(\bar{x}\) 的“平均距离…

黄南州wap网站建设公司代理ip大全

数据库请求接口封装 uniapp中提供了plus.sqlite接口&#xff0c;在这里我们对常用的数据库请求操作进行了二次封装 这里的dbName、dbPath、recordsTable 可以根据你的需求自己命名 module.exports {/** * type {String} 数据库名称*/dbName: salary,/*** 数据库地址* type {…

鄢陵县北京网站建设长沙网站制作工作室

需求&#xff1a;页面跳转到目标页面之后&#xff0c;对应的顶部路由高亮 上面的更多 跳转到 学情分析下面的学生分析 <template><div class"topBar" ref"topBar" v-loading.fullscreen.lock"fullscreenLoading"><div class&quo…

二分法算法技巧-思维提升 - 教程

二分法算法技巧-思维提升 - 教程2025-10-07 11:08 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

开源量子模拟引擎:Quantum ESPRESSO本地部署教程,第一性原理计算轻松入门! - 实践

开源量子模拟引擎:Quantum ESPRESSO本地部署教程,第一性原理计算轻松入门! - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

基于Python+Vue开发的大学竞赛报名管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习…

详细介绍:QT常用控件(1)

详细介绍:QT常用控件(1)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

网站制作素材绿色商城网站模板

多参数方法的问题相信很多人曾经都写过多参数的构造方法&#xff0c;就像下面示例的代码。当想要创建一个给全部属性赋值的实例的时候&#xff0c;就会利用这个多参数的构造方法。但是&#xff0c;当类的属性特别多的时候&#xff0c;你还会这么写吗&#xff1f;如果你写了一个…

Generate First, Then Sample: Enhancing Fake News Detection with LLM-Augmented Reinforced Sampling

论文阅读1. 任务 如何提高假新闻检测的效果,特别是针对假新闻本身的检测能力 2. 研究背景与问题提出:假新闻指包含虚假信息的新闻,其在社交媒体上的传播对公共卫生、政治等关键社会议题构成严重威胁。现有假新闻检测…

开发电商网站多少钱刷赞网站推广软件

文末下载上传环境源码客户端js检查一般都是在网页上写一段javascript脚本&#xff0c;校验上传文件的后缀名&#xff0c;有白名单形式也有黑名单形式。查看源代码可以看到有如下代码对上传文件类型进行了限制&#xff1a;我们可以看到对上传文件类型进行了限制。绕过方法1.我们…

手机网站网站开发流程开发软件开发

目录 一、常见的压缩包的扩展名 二、常见的压缩和解压指令 1、tar 2、tar gzip&#xff08;.tar.gz&#xff09; (或 .tgz) 3、tar bzip2&#xff08;.tar.bz2&#xff09; 4、zip 5、gzip 6、bzip2 7、xz 8、rar 9、7z 三、安装解压工具 一、常见的压缩包的扩展…

数据大屏

数据大屏 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1…

K8S上采用helm部署 Prometheus + Grafana

K8S上采用helm部署 Prometheus + Grafanapre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

AI元人文的硅基基石体系:EPU+VPU+WBUC+WAUC深度解析——声明Ai解析

AI元人文的硅基基石体系:EPU+VPU+WBUC+WAUC深度解析 一、引言:硅基生命的人文基因 在2025年阿里云栖大会上,"云智一体,碳硅共生"的主题引发了人们对未来智能形态的深刻思考。随着人工智能技术的迅猛发展…

做熊猫tv网站的目的互联网电子商务网站开发技术

前言 踩着前人的肩膀&#xff0c;努力前行。参考了很多前人的文章。 1.变量声明const和let es6之前声明变量只能用var&#xff0c;var的特点是无论声明在何处&#xff0c;都会被视为声明在函数的最顶部(不在函数内即在全局作用域的最顶部) function test(){if(false){var name …

优秀网站建设哪家专业网页打不开用什么浏览器

引子 网络层能够被分解为两个相互作用的部分&#xff1a; 数据平面和控制平面。 网络层概述 路由器具有截断的协议栈&#xff0c;即没有网络层以上的部分。 如下图所示&#xff0c;是一个简单网络&#xff1a; 转发和路由选择&#xff1a;数据平面和控制平面 网络层的作用…

做画册去什么网站找素材网站建设新闻咨询

官方文档 在前面 文章目录 uboot常见命令学习环境变量网络控制台uboot标准启动其他 升级uboot或内核bin和uimg以及booti和bootm的区别制作uImage更换内核更换uboot后续计划 uboot常见命令学习 环境变量 Environment Variables环境变量 autostart 如果值为yes&#xff0c;则会…

电脑做网站服务器需要什么软件手机网站 侧边栏导航

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、泛型1、什么是泛型2、泛型的语法 二、泛型类的使用1、泛型类的语法2、泛型如何编译的2.1、擦除机制2.2、为什么不能实例化泛…