首页 > 其他分享 >synchronized原理

synchronized原理

时间:2023-05-20 23:23:25浏览次数:42  
标签:加锁 monitor synchronized 对象 代码 线程 原理

`synchronized` 是 Java 中用来实现线程同步的关键字,它的主要作用是对代码块或方法进行加锁,保证在同一时刻只有一个线程能够执行被加锁的代码块或方法,从而避免多个线程同时访问共享资源导致的数据不一致问题。

`synchronized` 的实现原理是基于 Java 对象头中的 monitor (监视器)实现的。每个 Java 对象都有一个与之相关联的 monitor 对象,用来实现对该对象的同步访问。当一个线程进入一个 `synchronized` 代码块或方法时,它会尝试获取该对象的 monitor 锁,如果该对象的 monitor 锁没有被其他线程占用,则该线程会获得该对象的 monitor 锁,并继续执行 `synchronized` 代码块或方法,同时该线程可以释放该对象的 monitor 锁;如果该对象的 monitor 锁已经被其他线程占用,则该线程会被阻塞,直到其他线程释放该对象的 monitor 锁,该线程再次尝试获取该对象的 monitor 锁后才能继续执行。

`synchronized` 除了可以对代码块和方法进行加锁之外,还可以对静态方法和类进行加锁,用法如下:

 1 // 对代码块进行加锁
 2 synchronized (lockObject) {
 3     // ...
 4 }
 5 
 6 // 对方法进行加锁
 7 public synchronized void doSomething() {
 8     // ...
 9 }
10 
11 // 对静态方法进行加锁
12 public static synchronized void doSomethingStatic() {
13     // ...
14 }
15 
16 // 对类进行加锁
17 synchronized (ClassName.class) {
18     // ...
19 }

需要注意的是,对于同一对象或同一类的不同 `synchronized` 代码块或方法,它们之间的同步性是相互独立的,即在一个线程执行某个 `synchronized` 代码块或方法时,不会影响另一个线程执行该对象或类的其他 `synchronized` 代码块或方法。

标签:加锁,monitor,synchronized,对象,代码,线程,原理
From: https://www.cnblogs.com/SuperGuoYa/p/17418007.html

相关文章

  • python中的装饰器原理和作用
    装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器,一般为了简化装饰器会用语法糖@新函数来简化例子:这是一段代码,但功能太少,要对这个进行增强,但又不能改变代码。defhello():return"helloworld!"现在我......
  • 容器目录挂载原理
    前言就我目前的对容器的了解,使用namespace技术实现隔离,使用cgroups技术实现资源限制.但是具体是如何实现却从未深究过.闲来无事,挑其中的MountNamespace来康康,容器是如何实现目录隔离的.目录隔离在耗子叔的这篇文章中对此技术进行了介绍.在c函数库中,可通过如下方......
  • 基于奇异值分解的点云配准RT计算原理
    问题描述假设在\(d\)维空间\(\mathbb{R}^d\)中,存在两个对应点集合\(P=\left\{{{{\mathbf{p}}_1},{{\mathbf{p}}_2},\cdots,{{\mathbf{p}}_n}}\right\}\),\(Q=\left\{{{{\mathbf{q}}_1},{{\mathbf{q}}_2},\cdots,{{\mathbf{q}}_n}}\right\}\),其中\(......
  • IO流原理及流的分类
    1. IO 流原理及流的分类  6141.1 Java IO 流原理1. I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等。2. Java程序中, 对于数据的输入/输出操作以”流(stream)" 的方式进行。3. java.io包下提供了各种"流”类和接口,用以获取......
  • 聊聊Seata分布式解决方案AT模式的实现原理
    什么是Seata分布式事务解决方案Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。AT模式AT模式目前来看是Seata框架独有的一种模式,其它的分布式框架上并没有此种模式......
  • Nacos 核心原理解读+高性能微服务系统实战
    Nacos核心原理解读+高性能微服务系统实战download:3w51xuebccom《模拟人生4》(TheSims4)是一款由Maxis和TheSimsStudio开发,由ElectronicArts发行的模拟人生游戏。它被广泛认为是模拟人生系列中最好玩的一部分。本文将向您介绍TS4的入门知识。TS4的基本概念在TS4中,你可以创建......
  • .NET 通过源码深究依赖注入原理
    依赖注入(DI)是.NET中一个非常重要的软件设计模式,它可以帮助我们更好地管理和组织组件,提高代码的可读性,扩展性和可测试性。在日常工作中,我们一定遇见过这些问题或者疑惑。Singleton服务为什么不能依赖Scoped服务?多个构造函数的选择机制?源码是如何识别循环依赖的?虽然我们可......
  • spring5中IOC容器(底层原理1-3)
    什么是IOC1.控制反转:把对象创建和对象之间的调用过程,交给spring进行管理2.使用IOC目的:为了耦合度降低IOC底层原理xml解析,工厂模式,反射 画图讲解IOC底层原理  IOC过程:  IOC接口1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂2.Spring提供IOC容......
  • C#中BitConverter.ToUInt16、BitConverter.ToUInt32原理与用法详解
    一、基础知识a、1字节=8位(1Byte=8bit) 二进制表示:11111111 十进制表示:255计算机内部约定用多少字节来规范数值,比如红绿蓝三色在计算机中只分配了一个字节,一个字节有八位,每一位只能储存1或0,计算机只认识二进制(0与1),所以就是2的八次方,计算机中约定从0开始计数,所......
  • AZC智能集成式电力电容器的原理与优点介绍
    安科瑞虞佳豪随着国家对农村建设的大力支持,农村生活条件不断改善,用电量也不断加大,逐渐暴露出农村低电压的现象;以及大量单相家用电器设备使用,将导致三相负荷不平衡,配电网电压波动大,严重时则会损坏用电设备,因此,农村对电压质量的要求也越来越高。现农村配电网大部分仍使用传统无功补......