浅谈Java的synchronized 锁以及synchronized 的锁升级

news2024/12/29 10:09:07

在Java中,synchronized关键字用于实现线程间的同步,确保同一时刻只有一个线程能够访问被同步的代码块或方法。当一个线程获得synchronized锁定后,其他试图访问同一锁的线程将被阻塞,直到锁被释放。

synchronized锁有两种基本形式:

  1. 同步方法:通过在方法声明前加上synchronized关键字,整个方法体被保护,同一时间内只能有一个线程访问该方法。

    public class MyClass {
        public synchronized void synchronizedMethod() {
            // 执行同步代码...
        }
    }
    
  2. 同步代码块:通过synchronized(object)的方式指定一个对象作为锁,只有持有该锁的线程才能执行同步代码块。

    public class MyClass {
        private Object lock = new Object();
        
        public void synchronizedBlock() {
            synchronized (lock) {
                // 执行同步代码...
            }
        }
    }
    

synchronized锁的升级机制是Java虚拟机(JVM)为了提高并发性能而引入的一种优化措施,它发生在HotSpot虚拟机中,主要包括以下四种状态:

  1. 无锁状态:对象未被任何线程锁定。
  2. 偏向锁(Biased Locking):当只有一个线程访问同步代码块时,会偏向于该线程,仅记录该线程ID,后续该线程进入同步代码块时无需再进行加锁操作。
  3. 轻量级锁(Lightweight Locking):当第二个线程尝试获取偏向锁时,偏向锁失效,转变为轻量级锁。轻量级锁通过CAS(Compare and Swap)操作尝试获取锁,如果获取失败(即已经有其他线程持有了锁),会进行自旋(spin)尝试,短时间内不停尝试获取锁,减少上下文切换的开销。
  4. 重量级锁(Heavyweight Locking):如果自旋一定次数后仍无法获取锁,轻量级锁会膨胀为重量级锁,此时会挂起当前线程,使其进入阻塞状态,等待锁持有者释放锁。重量级锁会消耗更多的系统资源,但它能保证公平性和互斥性。
  5. 4种状态的转换关系如下图所示:
    在这里插入图片描述

这种锁升级机制旨在减少不必要的上下文切换,从而提高程序在多线程环境下的执行效率。在Java 6及以后版本的HotSpot JVM中,默认开启了锁升级优化策略。

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

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

相关文章

计算机网络实验实验之VLAN的配置与分析

实验目的 了解什么是带内管理;熟练掌握如何使用telnet方式管理交换机;熟练掌握如何为交换机设置web方式管理;熟练掌握如何进入交换机web管理方式;了解交换机web配置界面,并能进行部分操作。 (6)了解VLAN原理&#xf…

python pygame事件与事件处理

本期是接上期python pygame库的略学内容最后一个步骤,游戏与玩家交互的内容。 一、什么是事件 游戏需要与玩家交互,因此它必须能够接收玩家的操作,并根据玩家的不同操作做出有针对性的响应。程序开发中将玩家会对游戏进行的操作称为事件&…

微服务架构与Dubbo

一、微服务架构 微服务架构是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 分布式系统式若干独立系统的集合,但是用户使用起来好像是在使用一套系统。 和微服务对应的是单体式开发,即所有的功能打包在一个WAR…

关于CRMEB 商城系统商业授权的那些事儿

现在,很多时候我们都会听到“授权”这个词,在CRMEB的商城系统产品中,商业授权也是一个重要环节,今天,我们就来了解一下关于CRMEB商城系统授权的那些事儿。 一、为什么要进行商业授权? 正版商业授权是对用户…

【Linux】详解如何利用共享内存实现进程间通信

一、共享内存(Shared Memory)的认识 共享内存(Shared Memory)是多进程间共享的一部分物理内存。它允许多个进程访问同一块内存空间,从而在不同进程之间共享和传递数据。这种方式常常用于加速进程间的通信,因…

软考130-上午题-【软件工程】-系统维护

一、系统维护概述 软件维护是软件生命周期中的最后一个阶段,处于系统投入生产性运行以后的时期中,因此不属于系统开发过程。 软件维护是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程,即软件在交付使用后对软件所做的一…

李沐-19 卷积层【动手学深度学习v2】

记录下关于权重下标变换的理解: 从原来的Wi,j到Wi,j,k,l是从二维到四维的过程,如下图所示 对全连接层使用平移不变性和局部性得到卷积层,这是卷积层的引入,下方Vi,j,a,b--->Va,b表示了平移不变性,给a,b限制在||内保…

C语言 【函数】

1.函数概述 函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能 函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用 2. 函数的使用 2.1 无参无返回值 #include <stdio.h>// 函数名…

光纤收发器的注意事项

光纤收发器有各种不同的类别&#xff0c;而实际使用中最受关注的是根据光纤收发器的不同类别&#xff1a;SC连接器光纤收发器和FC/ST连接器光纤收发器。 当使用光纤收发器连接到不同的设备时&#xff0c;必须小心使用不同的端口。 1.光纤收发器与100Base TX设备&#xff08;交…

IP定位技术原理详细阐述

IP定位技术原理主要基于IP地址与地理位置之间的关联&#xff0c;通过一系列的技术手段&#xff0c;实现对网络设备的物理位置进行精确或大致的定位。以下是对IP定位技术原理的详细阐述。 首先&#xff0c;我们需要了解IP地址的基本概念。IP地址是互联网协议地址的简称&#xff…

【leetcode】双指针算法技巧——滑动窗口

标题&#xff1a;【leetcode】双指针算法技巧——滑动窗口 水墨不写bug 正文开始&#xff1a; 滑动窗口介绍 滑动窗口是一种常用的算法技巧&#xff0c;用于解决一些涉及 连续子数组或子串 的问题。它的基本思想是 维护一个窗口&#xff0c;通过 在窗口内移动 来寻找满…

LeetCode刷题总结 | 图论3—并查集

并查集理论基础 1.背景 首先要知道并查集可以解决什么问题呢&#xff1f; 并查集常用来解决连通性问题。大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判…

Day18_学点儿设计模式_MVC和三层架构

0 优质文章 MVC与三层架构 什么是MVC&#xff1f;什么是三层架构&#xff1f; 三层架构与MVC详细讲解 MVC三层架构&#xff08;详解&#xff09; 1 MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写…

【Vue3】setup语法糖的使用

文章目录 setup简介使用vite-plugin-vue-setup-extend插件 指定组件名字 setup简介 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖 相比较普通的<script> ,它有以下优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。能够使用纯…

图论学习总结

文章目录 图论学习总结前言一、基础知识图的存储图的遍历 二、最短路多源最短路 F l o y d Floyd Floyd​ 算法例题及变形** e g 1 &#xff1a; S o r t i n g I t A l l O u t eg1&#xff1a;Sorting\ It\ All\ Out eg1&#xff1a;Sorting It All Out ( A c W i n g 343 /…

数字次数排序-第12届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第53讲。 数字次数排序&…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle&#xff0c;然后点击…

【数据结构】习题之消失的数字和轮转数组

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组&#xff0c;&#xff0c;也会分享三种思路&#xff0c;大…

P1278 单词游戏 简单搜索+玄学优化

单词游戏 传送门 题目描述 Io 和 Ao 在玩一个单词游戏。 他们轮流说出一个仅包含元音字母的单词&#xff0c;并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致。 游戏可以从任何一个单词开始。 任何单词禁止说两遍&#xff0c;游戏中只能使用给定词典中含有…

智慧电网数据可视化运维云平台解决方案

智慧电力概述 智慧电力是通过采用先进的大数据、云计算、物联网、边缘计算等技术&#xff0c;实现生产信息与管理信息的智慧&#xff0c;实现人、技术、经营目标和管理方法的集成&#xff0c;是企业管理思想的一个新突破。智慧电厂建设具备智能化、一体化、可观测、可互动、自…