同步锁、死锁、乐观锁、悲观锁 (高薪常问)

简介: 同步锁、死锁、乐观锁、悲观锁 (高薪常问)

同步锁:
当多个线程同时访问同一个数据时,很容易出现问题。为了避免这种情况出现,我们要保证线程同步互斥,就是指并发执行的多个线程,在同一时间内只允许一个线程访问共享数据。Java 中可以使用 synchronized 关键字来取得一个对象的同步锁。
死锁:
何为死锁,就是多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。
乐观锁:
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_conditio机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。
悲观锁:
总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

目录
相关文章
最新jsonwebtoken-jjwt 0.12.3 基本使用
最新jsonwebtoken-jjwt 0.12.3 基本使用
2669 1
|
8月前
|
网络安全 开发工具 git
解决 Git 访问 GitHub 时的 SSL 错误
通过上述步骤,可以有效解决 Git 访问 GitHub 时的 SSL 错误。推荐优先更新 CA 证书和正确配置 Git 使用 CA 证书,避免禁用 SSL 验证。如果问题持续,可以切换到 SSH 方式访问 GitHub,确保连接的安全性和稳定性。希望这些内容对您的学习和工作有所帮助。
2096 4
|
12月前
|
存储 开发者
GitHub CLI - 将GitHub带入命令行
本文介绍了 GitHub CLI(命令行界面)的基本概念及其主要功能,重点讲解如何通过命令行管理 GitHub 上的问题和拉取请求。文章详细列出了与问题和拉取请求相关的常用命令,包括列出、查看、创建和检查状态等操作,旨在帮助开发者提高工作效率,优化日常开发流程。
316 2
GitHub CLI - 将GitHub带入命令行
|
11月前
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文作者是一位自学前端两年半的大一学生,分享了在Spring Boot项目中使用Knife4j遇到的问题及解决方案,包括解决Swagger请求404错误、JS错误等,详细介绍了依赖升级、注解替换及配置修改的方法。
2043 1
|
Java Spring
Spring中Bean的五大作用域
Spring中Bean的五大作用域
361 0
|
Java Linux Windows
记一次排查循环依赖的经历
记一次排查循环依赖的经历
|
存储 负载均衡 监控
redis 集群模式(redis cluster)介绍
redis 集群模式(redis cluster)介绍
|
Java Linux
POI 生成word 转 pdf
根据业务需要 需要出一份 PDF 文件 作为 公告的附件使用 PDF文件中 需要有 各种数据作为展示 是动态生成的
2876 0
POI  生成word 转 pdf
|
数据采集 人工智能 Python
【AI大模型应用开发】【LangChain系列】8. 重要组件介绍:如何运用LangChain表达式语言LCEL中的RunnableParallel和RunnablePassthrough?
【AI大模型应用开发】【LangChain系列】8. 重要组件介绍:如何运用LangChain表达式语言LCEL中的RunnableParallel和RunnablePassthrough?
291 0
|
前端开发 JavaScript
如何使用React更换背景颜色
如何使用React更换背景颜色
319 0