首页 > 其他分享 >Synchronized用过吗,其原理是什么

Synchronized用过吗,其原理是什么

时间:2024-11-05 17:10:39浏览次数:3  
标签:synchronized Synchronized 中断 获取 线程 原理 重量级 用过 轻量级


synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候,Java 虚拟机 对此进行了大刀阔斧地改进,提供了三种不同的 monitor 实现,也就是常说的三种不同的锁:偏向锁(Biased Locking)、轻量级锁和重量级锁,大大改进了其性能。

 

在JDK1.6以后Synchronized引入了偏向锁、轻量级锁、重量级锁、锁的粗化、锁消除的优化。并发性能基本和Lock持平的。

偏向锁:是不存竞争情况下,从而在后续的代码块中没有加锁解锁的开销
轻量级锁:轻量级锁所适应的场景是线程交替执行同步块的场合
重量级锁:重量级锁首先会经过一定次数的CAS自旋操作获取锁,如果获取失败,存在同一时间多个线程访问同一把锁的场合,就会导致轻量级锁膨胀为重量级锁。是在竞争激烈的情况下创建一个monitor对象,并且将线程挂起,而挂起就要切换到内核状态执行。从而开销非常大。
轻量级锁:当锁是偏向锁时,有另外一个线程来访问,会撤销掉偏向锁,然后升级为轻量级锁,这个线程会通过自旋方式不断获取锁,不会阻塞,提高性能

重量级锁:轻量级锁尝试去获取到锁,如果获取失败线程就会进入阻塞状态,该锁会升级为重量级锁,重量级锁时,来竞争锁的所有线程都会阻塞,性能降低

注意,锁只能升级不能降级

(1)可重入性
synchronized的锁对象中有一个计数器(recursions变量)会记录线程获得几次锁;
1.可重入的好处:
2.可以避免死锁;
3.可以让我们更好的封装代码;
synchronized是可重入锁,每部锁对象会有一个计数器记录线程获取几次锁,在执行完同步代码块时,计数器的数量会-1,直到计数器的数量为0,就释放这个锁。
(2)不可中断性
1.一个线程获得锁后,另一个线程想要获得锁,必须处于阻塞或等待状态,如果第一个线程不释放锁,第二个线程会一直阻塞或等待,不可被中断;
2. synchronized属于不可被中断;3.Lock lock方法是不可中断的;4.Lock tryLock方法是可中断的;

`synchronized`锁具有不可中断性,即一旦某个线程获得了锁,其他试图获取该锁的线程将一直处于阻塞状态,直到持有锁的线程释放锁为止。而Lock接口中的tryLock方法则提供了可中断的特性,允许在一定时间内尝试获取锁,如果无法立即获取到锁,则可以返回false而不阻塞当前线程。

标签:synchronized,Synchronized,中断,获取,线程,原理,重量级,用过,轻量级
From: https://www.cnblogs.com/89564f/p/18528376

相关文章

  • 黑马程序员JavaWeb开发教程(后端部分---原理篇) ---笔记分享
    目录SpingBoot原理配置优先级Bean管理获取BeanBean作用域第三方BeanSpringBoot原理起步依赖自动配置自动配置原理原理分析要搞清楚SpringBoot的自动配置原理,要从SpringBoot启动类上使用的核心注解@SpringBootApplication开始分析:@SpringBootConfiguration注解上使......
  • 计算机组成原理基础知识(二)
    来源:https://blog.csdn.net/weixin_47180815/article/details/125496560?fromshare=blogdetail&sharetype=blogdetail&sharerId=125496560&sharerefer=PC&sharesource=rxzyyyyyy&sharefrom=from_linkn位定点小数、整数的取值范围溢出判断1、采用一位符号位2、采用双符......
  • IO 多路复用技术:原理、类型及 Go 实现
    文章目录1.引言IO多路复用的应用场景与重要性高并发下的IO处理挑战2.IO多路复用概述什么是IO多路复用IO多路复用的优点与适用场景3.IO多路复用的三种主要实现3.1`select`3.2`poll`3.3`epoll`三者对比4.深入理解epoll4.1epoll的三大操作4.2epoll的......
  • synchronized的monitor监视器
    publicclassT{@SneakyThrowspublicstaticvoidmain(String[]args){System.out.println("此行后加锁monitorenter");synchronized(T.class){System.out.println("hellomonitor");}Syste......
  • Spring常用过滤器(Filter)-AuthorizationFilter
    AuthorizationFilter:授权过滤器,用于执行访问控制决策。1.1定义与作用:1.1.1定义:AuthorizationFilter是ASP.NETMVC中用于安全性检查的过滤器,它通过实现IAuthorizationFilter接口来定义。该接口提供了一个OnAuthorization方法,用于在用户请求到达Action方法之前执行授权逻辑。......
  • MyBatis实现原理
    MyBatis底层实现原理1、MyBatis实现基础1.1、动态代理1.2、责任链1.3、动态代理和责任链结合使用实例1.3.1定义接口1.3.2.实现接口1.3.3创建InvocationHandler1.3.4使用动态代理和责任链2、MyBatis底层原理2.1拦截器接口Interceptor2.2插件Plugin2.3执行引擎Ex......
  • 弧度制创建原理
    弧度制的创建原理。弧度制的定义和圆的几何性质密切相关。让我们进一步讲解这个概念:弧度制的定义基础圆的周长与半径的关系:圆的周长(C)与其直径(D)的比值是一个常数,称为圆周率(\pi),即(C=\piD)。因为直径(D=2r)(其中(r)是圆的半径),所以周长也可以表示为(C=2\pi......
  • Prometheus Exporter的底层原理涉及到几个关键组件和步骤,主要包括Collector、Exporter
    PrometheusExporter的底层原理涉及到几个关键组件和步骤,主要包括Collector、Exporter以及PrometheusServer。以下是这些组件的工作原理和它们如何协同工作的详细解释:1.**Collector(收集器)**:  -Collector负责从目标应用程序或系统收集指标,并将其转化为Prometheus可识别......
  • git原理与上传
    言:git是一个软件,gitee/github是一个网站,这里有什么联系吗?我们身为一个程序员不可能不知道github,但是毕竟这是外国的网站,我们不翻墙的情况下,是无法访问的(或者就是太慢了,或者就是英语不好的同学不想使用),所以可以使用中国的平替gitee。我们一般通过它用来上传代码,但是各位可能......
  • Spring原理Boot
    Spring原理SpringBoot1Boot1.1Boot骨架项目如果是linux环境,用以下命令即可获取springboot的骨架pom.xmlcurl-Ghttps://start.spring.io/pom.xml-ddependencies=web,mysql,mybatis-opom.xml也可以使用Postman等工具实现若想获取更多用法,请参考curlhttps......