三年java面试题答案详解

在互联网业界里,只要你有相应的技术,过了面试后一般工作就稳了,所以面试可谓是十分重要的,本篇文章就来了解下近三年常见的java面试题吧。

1)、Java 中能创建 volatile 数组吗

能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到

volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

2)、volatile 能使得一个非原子操作变成原子操作吗

一个典型的例子是在类中有一个 long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为

volatile。为什么因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long

变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。

3)、volatile 修饰符的有过什么实践

一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long

都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile

型的 long 或 double 变量的读写是原子的。volatile 修复符的另一个作用是提供内存屏障(memory

barrier),例如在分布式框架中的应用。简单的说,就是当你写一个 volatile 变量之前

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值