欢迎光临
我们一直在努力

阿里P7高级Android面经:Java并发编程、JVM调优、volatile原理、synchronized升级

P6中级聊完,进入P7高级。P7是技术专家级别,面试从\”会用框架\”转向\”理解底层\”——volatile可见性怎么保证?synchronized锁升级过程?JVM的GC算法怎么选择?答得好就是P7 offer,答得浅降到P6。

今天8道题覆盖P7核心考点,每道给出能展开三轮追问的深度。

Q1:volatile怎么保证可见性和禁止指令重排?

可见性:volatile变量写入时直接刷到主内存(不走CPU缓存),读取时直接从主内存读(不读缓存)。所以一个线程改了volatile变量其他线程立即可见。

禁止指令重排:编译器/CPU会重排指令优化性能,但volatile变量前后加内存屏障(Memory Barrier),阻止屏障两侧的指令跨过volatile操作重排。

经典场景:DCL单例——if (instance == null)检查后创建对象。对象初始化分三步(分配内存→构造函数初始化→引用赋值),没有volatile的话2和3可能重排,其他线程拿到未初始化的对象。

追问:volatile能保证原子性吗?不能。volatile int count; count++不是原子的(读→加→写三步,中间可能被其他线程改)。要保证原子性用AtomicInteger(CAS)或加锁。

Q2:synchronized的锁升级过程?

JDK 1.6后synchronized做了重大优化,不再直接上重量级锁。锁升级路径:

无锁 → 偏向锁<

赞(0)
未经允许不得转载:171主机测评 » 阿里P7高级Android面经:Java并发编程、JVM调优、volatile原理、synchronized升级
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址