Java面试题-Java中的锁
1. 如何实现乐观锁(CAS)?如何避免ABA问题?
答:1)读取内存值的方式实现了乐观锁(比如:SVN系统),方法:第一,比较内存值和期望值;第二,替换内存值为要替换值。
2)带参数版本来避免aba问题,在读取和替换的时候进行判定版本是否一致
2. 读写锁可以用于什么应用场景?
答: 读写锁可以用于 “多读少写” 的场景,读写锁支持多个读操作并发执行,写操作只能由一个线程来操作
ReadWriteLock对向数据结构相对不频繁地写入,但是有多个任务要经常读取这个数据结构的这类情况进行了优化。ReadWriteLock使得你可以同事有多个读取者,只要它们都不试图写入即可。如果写锁已经被其他任务持有,那么任何读取者都不能访问,直至这个写锁被释放为止。
ReadWriteLock 对程序心性能的提高受制于如下几个因素也还有其他等等的因素。
1)数据被读取的频率与被修改的频率相比较的结果。
2)读取和写入的时间
3)有多少线程竞争
4)是否在多处理机器上运行
3. 什么时候应该使用可重入锁?
答:重入锁指的是在某一个线程中可以多次获得同一把锁,在线程中多次操作有锁的方法。
4. 什么场景下可以使用volatile替换synchronized?
答: 只需要保证共享资源的可见性的时候可以使用volatile替代,synchronized保证可操作的原子性一致性和可见性。volatile适用于新值不依赖于就值的情形。
volatile是java提供的一种同步手段,只不过它是轻量级的同步,为什么这么说,因为volatile只能保证多线程的内存可见性,不能保证多线 程的执行有序性。而最彻底的同步要保证有序性和可见性,例如synchronized。任何被volatile修饰的变量,都不拷贝副本到工作内存,任何 修改都及时写在主存。因此对于Valatile修饰的变量的修改,所有线程马上就能看到,但是volatile不能保证对变量的修改是有序的。volatile存在的意义是,任何线程对某个变量的修改,都会马上被其他线程读取到,因为直接操作主存, 没有线程对工作内存和主存的同步。所以,volatile的使用场景是有限的,在有限的一些情形下可以使用 volatile 变量替代锁(synchronized)。
要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
1)对 变量的写操作不依赖于当前值。
2)该变量没有包含在具有其他变量的不变式中
转载于:https://www.cnblogs.com/yeahwell/p/4544559.html
Java面试题-Java中的锁相关推荐
- Java面试题之:数据库锁
Java面试题之:数据库锁 一.行级锁 二.表级锁 三.页级锁 一.行级锁 行级锁是一种排他锁,防止其他事务修改此行:在使用以下语句时,Oracle 会自动应用行级锁: INSERT.UPDATE ...
- Java面试题之:乐观锁、悲观锁与自旋锁及其相关锁的优化(万字知识点详解)
Java面试题之:乐观锁.悲观锁与自旋锁及其锁的优化 一.乐观锁 二.悲观锁 三.自旋锁 ①自旋锁的优缺点 ②自旋锁时间阈值(1.6 引入了适应性自旋锁) ③自旋锁的开启 四.Synchronized ...
- Java与C语言中的锁
Java与C语言中的锁 C 嵌入式汇编的语法格式是: asm(code : output operand list : input operand list : clobber list) __asm ...
- 复习Java小球游戏代码分享Java面试题MySQL中常用的锁生活【记录一个咸鱼大学生三个月的奋进生活】021
记录一个咸鱼大学生三个月的奋进生活021 复习Java小球游戏 游戏界面的代码 小球运动线程的代码 运行游戏的代码 运行结果 代码分享 学习Java面试题(MySQL中常用的锁) 照片分享 复习Jav ...
- java 锁定界面_Java中的锁
java中的锁遵循不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵.刚好周末有时间学习下,总结和梳理下. 一总述 总的来说对java的锁有以下七种分类方法: ...
- 中软融鑫 java笔试题_中软国际java笔试题
中软国际Java程序员笔试题 Java程序员笔试题 1.谈谈final, finally, finalize的区别. 2.Anonymous Inner Class (匿名内部类) 是否可以exten ...
- java面试题——java基础(四),java初级面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- JAVA面试题|JAVA锁相关面试题总结(一)
JAVA基础篇面试题 文章目录 JAVA基础篇面试题 1. 什么是JMM 2. 介绍一下violated 3. 写一个单例模式 4. 介绍一下CAS 5. CAS的问题 6. ArrayList线程不 ...
- Java工作笔记/Java面试题/Java八股文/Java常用API
码农工具包 hutool工具 hutool工具类判断各种类型数据 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --& ...
- java面试题(java中高级面试题及答案)
[java面试题] 1.Collections.sort排序内部原理 在Java6Arrays.sort()和Collections.sort()中使用MergeSort,在Java7中,内部实现被T ...
最新文章
- PHP变量的变量——可变变量
- ffmpeg的编译大全
- 关羽在韩国有块私家地?
- diss范式:明星AI公司秋招被爆大规模毁约;CEO戴文渊:责任在我有错认罚
- js获取当天0点和24点的时间戳
- python的with用法
- 运行 Excel 脚本
- Unity实现刺客信条灯光的思路探究
- java rhino js类_Rhino -- 基于java的javascript实现
- 收藏夹吃灰系列(二):教小师妹通过代码实现Swagger在线接口文档转word文档!教完后...?
- angr分析程序的控制流图CFG
- python经济学_用python学习中级微观经济学【WARP篇】
- HTTP协议的默认端口是什么?底层原理是什么?
- PLS-00907: cannot load library unit
- 【Java】抽象类继承的综合案例
- 求1!+2!+3!+…+n!(2种方式)
- 中文的括号和英文的括号区别_小括号、中括号、大括号,英文怎么说?
- Mysql5.1 , Mysql5.5, Mysql5.7, Mysql8.0各个版本性能对比
- LZMA压缩/解压缩工具命令行用法参考
- Ubuntu 16.04 英伟达驱动、常用软件以及虚拟环境的安装
热门文章
- Error fetching https://gems.ruby-china.org/: 	bad response Not Found 404 (https://gems.ruby-china.or
- DirEqual for Mac(文件夹快速比较工具)
- AirPods耳机mac端管理工具:AirBuddy
- 如何在Mac上使用Memoji贴纸、屏幕效果、应用程序和Messages
- 11.20日个人工作总结
- Ubuntu 下 matplotlib 中文乱码
- Apache启用GZIP压缩网页传输方法
- 设为首页 添加到收藏夹 (share)
- CentOS6.2安装LAMP+DRUPAL网站(1)
- 数据结构(四)之冒泡排序