Java中Synchronzed关键字的相关用法和原理

本文详细介绍了Java中Synchronized关键字的作用、用法及底层实现机制,包括修饰方法、代码块和静态方法的同步控制。同时,文章讨论了自Java1.6以来对Synchronized的性能优化,如偏向锁、轻量级锁和自旋锁等概念。
摘要由CSDN通过智能技术生成

       最近看到一个面试题,包括我自己也经常遇到面试官问Synchronized关键字的用法和底层原理。今天就来总结一下相关的问题和答案。

1、Synchronized关键字的作用

       我想但凡用Java的开发者肯定都知道这个关键字,它是JDK提供给大家使用的同步关键字,用于在多线程场景下对关键资源的加锁,以保障数据不会因为多线程而紊乱。包括在Java很多内置的函数里面也都是使用的该关键字,比如JDK1.5里面的HashMap就是靠Synchronized关键字修饰的类方法来实现的线程安全。

2、Synchronized的用法

      Synchronized主要有三种用法,分别是:修饰方法、修饰代码块、修饰静态方法。

       2.1修饰对象方法,主要是将这个对象方法进行加锁,这样其他现场在调用这个对象时就无法访问了,但是该对象的其他方法仍然是可以被其他线程访问获取的。


       2.2修饰代码块,常常以Synchronized(this){代码块;}这种方式出现在代码证,这种情况下这一整块代码就可以被视作是一个整体,只能同时被一个线程所持有锁,进行资源访问,而其他线程只能被阻塞等待。

       2.3修饰静态方法,修饰静态变量也十分好理解,例如public static void synchronized get(int s){} ;这种情况下这个类方法的调用者,都会被锁控制。

3、Synchronized底层的实现机制

      该关键字的底层其实是依靠Monitor管程对象来实现的,一旦该对象或者方法被加了关键字,那么在底层就会有

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值