关于java中锁的面试题_Java面试题-Java中的锁

1. 如何实现乐观锁(CAS)?如何避免ABA问题?

答:1)读取内存值的方式实现了乐观锁(比如:SVN系统),方法:第一,比较内存值和期望值;第二,替换内存值为要替换值。

2)带参数版本来避免aba问题,在读取和替换的时候进行判定版本是否一致

1363269437_5451.jpg

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)该变量没有包含在具有其他变量的不变式中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSUserDefaults

2019独角兽企业重金招聘Python工程师标准>>> NSUserDefaults 转载于:https://my.oschina.net/18829297883/blog/737931

什么是算术运算和逻辑运算_8086微处理器的算术和逻辑运算

什么是算术运算和逻辑运算逻辑指令 (Logical Instructions) a) AND: Logical AND a)AND:逻辑AND Atleast one of the operant should be a register or a memory operant both the operant cannot be a memory location or immediate operant. 操作中的至少一个应该…

python文件读写用到的库_Python使用pyshp库读取shapefile信息的方法

通过pyshp库,可以读写shapefile文件,查询相关信息,github地址为 import shapefile # 使用pyshp库 file shapefile.reader("data\\市界.shp") shapes file.shapes() # print(file.shapetype) # 输出shp类型null 0 point 1 poly…

h5引入json_Vue中如何使用本地Json文件?

我需要将菜单配置成Json文件,然后再程序中引入{{menu.name}}import menuListConfig from ../../config/menu.jsonexport default {name: "Sider",data(){return {menuList:JSON.parse(JSON.stringify(menuListConfig))}}}需要如何做,才能v-for…

深入学习jQuery选择器系列第四篇——过滤选择器之属性选择器

前面的话 属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素,对应于CSS中的属性选择器。属性过滤选择器可分为简单属性选择器、具体属性选择器和条件属性选择器三种。本文将详细该部分内容 简单属性选择器 [attribute] [attribute]选择器选择拥有该属性的元…

c++ scanf读取_使用scanf()读取内存地址并在C中打印其值

c scanf读取Here, we have to input a valid memory address and print the value stored at memory address in C. 在这里,我们必须输入一个有效的内存地址并在C中打印存储在内存地址中的值。 To input and print a memory address, we use "%p" format…

python正则匹配_Python正则表达式只匹配一次

我正在尝试创建一个简单的降价乳胶转换器,只是为了学习 python和基本的正则表达式,但我不知道试图弄清楚为什么下面的代码不起作用: re.sub (r\[\*\](.*?)\[\*\]: ?(.*?)$, r\\footnote{\2}\1, s, flagsre.MULTILINE|re.DOTALL) 我想转换像: s "…

Virtual Network (1) - How to use it in a guest

本文将讲述一个问题:kvm guest使用libvirt xml定义如何使用virtual network?1)nat, route ,isolated, open类型在host中定义virtual network会创建一个虚拟的bridge,相当于一个交换机。guest只需要连接到这…

java string做除法_如果用java来实现传统方式的除法,用String来保存结果,想精确多少位都行,那改怎么做?...

我会加分的,提个思路都行,目前做了个乘法和加法,但是现在对除法没有什么思路。以下是我编写的功能:publicclassCalculator{publicstaticStringmulti(Strings1,Strings2){if(s1nu...我会加分的,提个思路都行&#xff0c…

c语言数组的声明和初始化_C声明和初始化能力问题和解答

c语言数组的声明和初始化This section contains aptitude questions and answers on C language Declarations and Initialization. 本节包含有关C语言声明和初始化的适切性问题和解答。 1) What will be the output of following program ? int main(){int m10;int xprintf(…

python2和python3的默认编码_python2和python3哪个版本新

Python2 还是 Python3 ? py2.7是2.x系列的最后一个版本,已经停止开发,不再增加新功能。2020年终止支持。 所有的最新的标准库的更新改进,只会在3.x的版本里出现。Python3.0在2008年就发布出来,而2.7作为2.X的最终版本并…

html-css样式表

一、CSS:Cascading Style Sheet—层叠样式表,其作用是美化HTML网页。 样式表分类:内联样式表、内嵌样式表、外部样式表 1、内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余多。 例如:&…

java 栈 先进后出_栈先进后出,堆先进先出

1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。2.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生…

c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器

c#给定二维数组按升序排序Problem: Write a program in 8086 microprocessor to sort numbers in ascending order in an array of n numbers, where size n is stored at memory address 2000 : 500 and the numbers are stored from memory address 2000 : 501. 问题&#xf…

使用python套用excel模板_Python自动化办公Excel-从表中批量复制粘贴数据到新表

1、模块安装 1)cmd模式下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl 2)如果有安装Pycharm,则在程序中操作如下: 菜单栏&…

在HubSpot是如何应对Fat JAR困境的

在七月底,Spring Boot和Dropwizard分别发布了1.4和1.0版本,它们都是基于Fat JAR的。随着人们更多地采用这些框架和微服务架构,Fat JAR成为了通用的部署机制。\\Fat JAR技术会将Java应用的所有依赖打包到一个bundle之中,便于执行&a…

给定数字的b+树创建_在C ++中找到给定数字中的两个的下一个和上一个幂

给定数字的b树创建Problem statement: 问题陈述: Find Next and previous power of two of a given number 查找给定数字中两个的下一个和上一个幂 Next power of two 下一个二的幂 Example(1):input: 22output: 32 ( as 32 is 2^5)Example(2):input: 54output…

java 字节数组作用_这段java代码中字节数组b起到了什么作用?

importjava.io.*;importjavax.swing.*;publicclassIOMonitor{publicstaticvoidmain(String[]temp){//TODO自动生成的方法存根byteb[]newbyte[2];try{FileInputStreamfisnewFileInput...import java.io.*;import javax.swing.*;public class IOMonitor {public static void main…

如何查看本地的崩溃log_过年回家,还怕抢不到票?程序员教你如何抢票

2019年接近尾声,距离春节回家的日子越来越近,26日起,2020年除夕火车票正式开售,抢票大战也进入白热化阶段。是否为某抢票 App 加速而烦恼,是否为车票“秒光而烦恼”。别慌,作为连“对象”都是 new 出来的程…

获取列表中包含的元素数 在C#中

Given a list, and we have to count its total number of elements using List.Count property. 给定一个列表,我们必须使用List.Count属性计算其元素总数 。 C#清单 (C# List) A list is used to represent the list of the objects, it is represent…