2022Java程序员面试题Java程序员面试题集锦Java面试随着时间的变更而变更
在过去的日子里,当你知道String和StringBuilder的区分就能让你干脆进入其次轮面试,但是现在问题变得越来越高级,面试官问的问题也更深化
下面是我整理的关于Java程序员面试题集锦,希望大家仔细阅读
1)Java中能创建Volatile数组吗
能,Java中可以创建volatile类型数组,不过只是一个指向数第1页共12页组的引用,而不是整个数组
我的意思是,假如变更引用指向的数组将会受到volatile的爱护,但是假如多个线程同时变更数组的元素,volatile标示符就不能起到之前的爱护作用了
2)volatile能使得一个非原子操作变成原子操作吗
一个典型的例子是在类中有一个long类型的成员变量
假如你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为volatile
因为Java中读取long类型变量不是原子的,须要分成两步,假如一个线程正在修改该long变量的值,另一个线程可能只能看到该值的一半(前32位)
但是对一个volatile第2页共12页型的long或double变量的读写是原子
3)volatile修饰符的有过什么实践
一种实践是用volatile修饰long和double变量,使其能按原子类型来读写
double和long都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个32位,然后再读剩下的32位,这个过程不是原子的,但Java中volatile型的long或double变量的读写是原子的
volatile修复符的另一个作用是供应内存屏障(memorybarrier),例如在分布式框架中的应用
简洁的说,就是当你写一个volatile变量之前,Java内存模型会插入一个写屏障第3页共12页(writebarri