面试官:有了解过Synchronized吗 说说看

面试官:有了解过Synchronized吗 说说看插图亿华云

前言

相信很多同学对synchronized的使用上不陌生,之前也给大家讲解过它的使用。本篇主要带大家深入了解一下它,大家也可以自己试着总结一下,这也是面试中常常问到的,单纯的回答它的基本使用,是惊艳不到面试官的~。

synchronized 介绍

从字面意思翻译过来就是同步的意思,所以它也叫同步锁,我们通常会给某个方法或者某块代码加上Synchronized锁来解决多线程中并发带来的问题,它也是最常用,最简单的一种方法。

在Java中,锁基本上都是基于对象而言的,所以又称为对象锁, 一个类通常只有一个class对象和n个实例对象,它们共享class对象,而我们有时候会对class对象加锁,所以又称为class对象锁。

这里大家要注意的是对象需要是一个非null的对象,我们通常也叫做对象监视器(Object Monitor)。

重量级锁

在JDK 1.5之前,它是一个重量级锁,我们通常都会使用它来保证线程同步。在1.5的时候还提供了一个Lock接口来实现同步锁的功能,我们只需要显式的获取锁和释放锁。

重在哪❓

在1.5的时候,Synchronized它依赖于操作系统底层的Mutex Lock实现,每次释放锁和获取锁都会导致用户态和内核态的切换,从而增加系统性能的开销,当出现大并发的情况下,锁竞争会比较激烈,性能显得非常糟糕,所以称为重量级锁,所以大家往往会选择Lock锁。

锁优化

但是Synchronized又是那么的简单好用,又是官方自带的,怎么可能放弃呢?所以在1.6之后,引入了大量的锁优化,比如自旋锁,轻量级锁,

THE END
Copyright © 2024 亿华云