synchronized的相关面试题

简介: synchronized的相关面试题

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

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

乐观锁🔒

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

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

悲观锁🔒

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

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

🌸具体实现

乐观锁🔒

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

悲观锁🔒

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


🔎介绍读写锁

读写锁与互斥锁不同

读写锁可以

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

其中

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

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

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

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


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

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

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

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

优点

可以更快的拿到锁

缺点

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


🔎synchronized 是可重入锁么

可重入锁

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

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

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

🔎结尾

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

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

相关文章
|
6月前
|
Java
【面试问题】Synchronized 和 ReentrantLock 区别?
【1月更文挑战第27天】【面试问题】Synchronized 和 ReentrantLock 区别?
|
6月前
|
存储 监控 安全
Synchronized 实现原理
Synchronized 实现原理
61 0
|
6月前
|
安全 Java
Java并发编程:Synchronized及其实现原理
Java并发编程:Synchronized及其实现原理
53 4
|
1月前
|
安全 Java
Synchronized是怎么实现的?
Synchronized是怎么实现的?
|
5月前
|
存储 Java C++
Synchronized底层原理
Synchronized底层原理
|
存储 安全 Java
synchronized 的底层原理
synchronized 的底层是通过 Java 中的监视器锁(monitor)来实现的。每个 Java 对象都有一个与之对应的监视器锁,当一个线程获取了该对象的监视器锁,就可以执行 synchronized 代码块或方法。其他线程只能等待该线程释放锁,才能获取该对象的监视器锁并执行 synchronized 代码块或方法。
104 0
synchronized 的底层原理
|
Java API 调度
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
83 0
|
Oracle Java 关系型数据库
面试永远逃不过的synchronized(上)
面试永远逃不过的synchronized
129 0
面试永远逃不过的synchronized(上)
|
存储 缓存 Oracle
面试永远逃不过的synchronized(下)
面试永远逃不过的synchronized
126 0
面试永远逃不过的synchronized(下)