面试:synchronized用过吗,其原理是什么
一、基础回答1. 用过吗用来做什么用过。synchronized 是 Java 内置的悲观锁关键字用来解决多线程并发安全问题保证同一时刻只有一个线程执行被锁定的代码避免线程安全问题如原子性、可见性、有序性问题。它有 3 种使用方式修饰实例方法锁当前实例对象修饰静态方法锁当前类的 Class 对象修饰代码块锁括号里指定的对象2. 核心原理极简版基于对象头 Monitor监视器锁实现每个 Java 对象都自带一个 Monitor 锁线程进入同步代码时尝试获取锁 → 获取成功执行获取不到就阻塞等待执行完毕 / 异常时自动释放锁特性可重入、不可中断、非公平锁二、进阶原理加分项面试官最爱1. 对象头结构锁存在哪里Java 对象在内存分 3 部分对象头 实例数据 对齐填充对象头里存锁信息Mark Word存储哈希码、分代年龄、锁状态、持有锁线程 IDKlass Pointer指向类元数据指针synchronized 的锁状态就存在 Mark Word 里。2. Monitor 工作机制核心原理每个对象关联一个 MonitorC 实现的 ObjectMonitor内部结构_owner持有锁的线程_EntryList锁等待队列_WaitSetwait () 等待队列执行流程1线程进入同步块 → 尝试把 _owner 设为自己2成功持有锁执行代码3失败进入 _EntryList 阻塞BLOCKED4锁释放_owner 置空唤醒队列线程竞争锁3. JDK 1.6 锁升级重要JDK1.6 对 synchronized 做了锁优化锁会逐级升级不可逆无锁 → 偏向锁 → 轻量级锁 → 重量级锁偏向锁只有一个线程用锁无 CAS 竞争记录线程 ID 到对象头下次直接进轻量级锁自旋锁两个线程交替执行CAS 竞争不阻塞自旋等待减少内核态切换重量级锁多线程激烈竞争线程阻塞依赖操作系统互斥量Mutex Lock4. 关键特性可重入同一线程再次获取锁不会死锁底层计数器实现不可中断锁等待中不能被中断非公平新线程可能直接抢到锁不排队三、面试满分背诵模板面试官synchronized 用过吗原理是什么用过synchronized 是 Java 内置的悲观锁用来保证多线程下的原子性、可见性、有序性解决并发安全问题。它可以修饰实例方法、静态方法、同步代码块分别锁实例对象、Class 对象、自定义对象。原理层面它基于对象头 Mark Word Monitor 监视器锁实现每个 Java 对象都自带一把锁。线程执行时会尝试获取 Monitor成功则执行失败进入阻塞队列。JDK1.6 做了锁优化会按 无锁→偏向锁→轻量级锁→重量级锁 自动升级提升性能。特性是可重入、不可中断、非公平锁。总结基础解决并发安全3 种用法基于对象 Monitor核心对象头 Mark Word 存锁状态高分锁升级流程偏向→轻量→重量特性可重入、非公平、不可中断
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2489840.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!