synchronized的相关面试题

简介: synchronized的相关面试题

🔎如何理解乐观锁和悲观锁的,具体怎么实现

🌸如何理解悲观锁与乐观锁

乐观锁🔒

预测接下来锁🔒冲突的概率不大

并不会真的加锁,只在数据进行提交修改的时候去对数据进行冲突检测

悲观锁🔒

预测接下来锁🔒冲突的概率较大

悲观锁总是假设最坏的情况,每次去拿数据时都认为别人会修改,所以每次拿数据时都进行加锁

🌸具体实现

乐观锁🔒

引入一个版本号,借助版本号识别当前的数据访问是否冲突

悲观锁🔒

先加锁,获取到锁再操作数据,获取不到锁就等待


🔎介绍读写锁

读写锁与互斥锁不同

读写锁可以

(1)给读加锁 (2)给写加锁 (3)解锁

其中

(1)读锁与读锁之间,不会产生锁竞争(不会影响程序速度)

(2)写锁与写锁之间,会产生锁竞争(会降低程序速度,但保证数据准确性)

(3)读锁与写锁之间,会产生锁竞争(会降低程序速度,但保证数据准确性)

主要应用于频繁读不频繁写的情况


🔎什么是自旋锁,为什么要使用自旋锁策略呢,缺点是什么

如果获取锁失败,就会一直重复加锁,不去做其他的事情(忙等),直到加锁成功

一旦锁被释放,可以第一时间拿到锁

一般为了能够更快的拿到锁,会选择自旋锁

优点

可以更快的拿到锁

缺点

会进行忙等(无法做其他的事情),浪费cpu


🔎synchronized 是可重入锁么

可重入锁

一个线程针对一把锁连续加锁两次后不会产生死锁

可重入锁会在第一次加锁时标记一下,记录当前线程是锁的拥有者

当第二次加锁时发现当前线程是锁的拥有者就会加锁成功

🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

相关文章
|
关系型数据库 MySQL Go
Golang 语言 Web 框架 beego v2 之读操作(上)
Golang 语言 Web 框架 beego v2 之读操作
214 0
|
数据采集 JavaScript 小程序
laravel8(四)使用simple_html_dom库解析html
首先:simple_html_dom下载地址: github.com/samacs/simp… 这是一个PHP解析html的一个库。 这玩意还是很有用的,比如我们在使用PHP做爬虫的时候,需要解析html中的内容等。 他的强大之处不仅仅只是帮助我们验证html文档;更能解析不符合W3C标准的html文档。 关于如何引入第三方类库,请移步《laravel5.8(十)引入第三方类库》laravel8中的设置方法也大同小异。 一:加载 html 有三种方式调用这个类: 1. 从url中加载html文档 2. 从字符串中加载html文档 3. 从文件中加载html文档
239 1
|
4月前
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
244 24
|
Java Windows
基于java Swing编写扫雷游戏设计实现(已调试)
基于java Swing编写扫雷游戏设计实现(已调试)
158 1
【TS】关于v-for数组对象遍历以及在页面上使用提示object类型的问题解决
【TS】关于v-for数组对象遍历以及在页面上使用提示object类型的问题解决
293 0
|
运维 监控 安全
【亮剑】为网络工程师总结了Juniper设备的配置、监控和故障排除命令
【4月更文挑战第30天】本文为网络工程师总结了Juniper设备的配置、监控和故障排除命令。配置命令包括基础设置、路由协议、安全和系统服务;监控命令涉及系统状态、接口、流量及路由表;故障排除命令涵盖日志、接口、路由协议和安全方面的排查工具。掌握这些基本命令将提升网络运维效率。
554 2
|
Linux
Linux系统中驱动之设备树添加按键驱动方法
Linux系统中驱动之设备树添加按键驱动方法
487 0
|
SQL 缓存 负载均衡
Web Security 之 HTTP Host header attacks(上)
Web Security 之 HTTP Host header attacks
934 0
|
JavaScript
详解——Vue3列展示功能及原理
详解——Vue3列展示功能及原理
326 0