常见面试题

Posted iwenwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见面试题相关的知识,希望对你有一定的参考价值。

一、volite的作用?如何保证内存可见性?如何防止指令重排?

volatile关键字通过提供“内存屏障”的方式来防止指令被重排序,为了实现volatile的内存语义,编译器在生成字节码时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序。

 

二、volatile和synchronized区别
1、volatile不会进行加锁操作:

volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。

2、volatile变量作用类似于同步变量读写操作:

从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。

3、volatile不如synchronized安全:

在代码中如果过度依赖volatile变量来控制状态的可见性,通常会比使用锁的代码更脆弱,也更难以理解。仅当volatile变量能简化代码的实现以及对同步策略的验证时,才应该使用它。一般来说,用同步机制会更安全些。

4、volatile无法同时保证内存可见性和原子性:

加锁机制(即同步机制)既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性,原因是声明为volatile的简单变量如果当前值与该变量以前的值相关,那么volatile关键字不起作用,也就是说如下的表达式都不是原子操作:“count++”、“count = count+1”。

三、

以上是关于常见面试题的主要内容,如果未能解决你的问题,请参考以下文章

面试题MySQL常见面试题合集

面试题Redis篇-常见面试题p1

面试题Redis篇-常见面试题p1

数据库常见面试题总结

面经 | Redis常见面试题

java常见面试题及答案