博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长。

独享锁/共享锁

独享锁是指该锁一次只能被一个线程所持有;共享锁是指该锁可被多个线程所持有。

对于Java ReentrantLock而言,其是独享锁。但是对于Lock的另一个实现类ReadWriteLock,其读锁是共享锁,其写锁是独享锁。读锁的共享锁可保证并发读是非常高效的,读写、写读 、写写的过程是互斥的。独享锁与共享锁也是通过AQS来实现的,通过实现不同的方法,来实现独享或者共享。对于synchronized而言,当然是独享锁。

互斥锁/读写锁

上面说到的独享锁/共享锁就是一种广义的说法,互斥锁/读写锁就是具体的实现。互斥锁在Java中的具体实现就是ReentrantLock;读写锁在Java中的具体实现就是ReadWriteLock。

乐观锁/悲观锁

乐观锁与悲观锁不是指具体的什么类型的锁,而是指看待并发同步的角度。

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。比如Java里面的同步原语synchronized关键字的实现就是悲观锁。

乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS(Compare and Swap 比较并交换)实现的。

参考资料

https://blog.csdn.net/tyyj90/article/details/78236053

http://ifeve.com/java-art-reentrantlock/

使用java理解程序逻辑 第十二章_Java多线程中锁的理解与使用(二)相关推荐

  1. 关于多线程中锁的理解

    2019独角兽企业重金招聘Python工程师标准>>> 在多线程中,锁是非常重要的一个东西. 在Java语言中,有对象和类之分,因此多线程的锁也可分为对象锁和类锁. 对象锁,顾名思义 ...

  2. 使用java理解程序逻辑 第十二章_Java弱引用的理解与使用

    Java弱引用的理解与使用 WeakReference 前言 看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. ...

  3. 奋斗吧,程序员——第十五章 去年今日此门中,人面桃花相映红

    元宵节从豫园飞出来的孔明灯,使得摩肩接踵的人群里时不时有人抬头发出这样的感叹. 那时候的蜀汉丞相诸葛亮,在他统一大业注定无法实现的北伐途中,在他"二将军三将军,望二位将军在天之灵,暗助亮一臂 ...

  4. book1复习 使用java理解程序逻辑

    book1复习 使用java理解程序逻辑 第一章 初识Java 开发步骤 编写源代码 编译源文件 运行 基本命令 输出内容:1,输出换行. 2,输出不换行 输入内容:获得键盘的输入 注释 单行注释 多 ...

  5. 题库明细 使用java理解程序逻辑

    题库明细 使用java理解程序逻辑 初识java 变量.数据类型和运算符 选择结构(一) 选择结构(二) 循环结构(一) 循环结构(二) 数组 循环结构进阶 类和对象 类的无参方法 带参数的方法 字符 ...

  6. 微信小程序(第二十四章)- 数据交互前置

    微信小程序(第二十四章)- 数据交互前置 讲解微信小程序前置的原因 参考文档 理解微信小程序 小程序简介 作用 提问 针对提问--uni-app介绍 小程序和普通网页开发的区别 小程序代码构成 文件个 ...

  7. Tensorflow 2.x(keras)源码详解之第十二章:keras中的损失函数之BinaryCrossentropy详解

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  8. 微信小程序(第十九章)- 用户评价页面实现

    微信小程序(第十九章)- 用户评价页面实现 页面结构的实现 页面样式实现 五角星实现 页面结构的实现 代码如下: <!--用户评价--> <view id="reviewV ...

  9. RH124 第十二章 Linux系统中的软件管理

    RH124 第十二章 Linux系统中的软件管理 1.Linux中软件包的类型 1.DEB #UBlinux DEBlinux 2.RPM #redhat centOS fc 3.bz2|gz|xz ...

最新文章

  1. 笔记-中项案例题-2021年上-范围管理
  2. Android-gradle插件调试
  3. selenium webdirver之ruby-开发ide安装
  4. 不解析,使用解析对象
  5. vlookup两个条件匹配_vlookup,你还是只会基础的单条件查找?
  6. linux+free参数类型,linux的free命令
  7. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——C题 上进的凡凡
  8. 超酷jQuery进度条加载动画集合
  9. 通达oa 2013 php解密,通达OA漏洞学习 - 安全先师的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 2020-10-27
  11. PyG框架:Graph Classification
  12. 斐波那契数列 Java实现
  13. Java单链表递归逆置
  14. 空间机械臂Matlab/Simulink仿真程序自由漂浮空间机械臂(双臂)轨迹跟踪控制matlab仿真程序
  15. 负数在计算机中是如何表示的
  16. linux6.5取消屏保,怎么把wps屏保关掉
  17. Android ocr识别文字介绍
  18. OpenCV Error: Unspecified error (could not find a writer for the specified extension) in imwrite
  19. 西秦的ACE-Python教程 一、Python本地开发环境部署
  20. 《华为研发》阅读 - 2

热门文章

  1. linux线程并不真正并行,多核时代:并行程序设计探讨(3)——Windows和Linux对决(多进程多线程)...
  2. 张雁飞 mysql_张雁飞:新一代分布式关系型数据库RadonDB
  3. mac搭建svn服务器文件被锁定,MAC搭建SVN服务器并配置Cornerstone
  4. QT每日一练day19:设计一个记事本
  5. C++函数指针使用示例
  6. linux查看服务器温度指令,linux查看服务器温度
  7. android开发自定义选择器,创建自定义android选择器
  8. kali2 安装docker_kali linux 安装docker
  9. 燕山大学计算机考研专硕专业课,燕山大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  10. streamsets添加mysql驱动_StreamSets3.9.1安装说明