说说Java“锁”事

本文深入探讨了Java中的锁机制,包括乐观锁与悲观锁的区别、公平锁与非公平锁的应用场景、可重入锁的工作原理、死锁的预防与解决方法等。此外,还详细解析了synchronized锁的不同级别及其升级过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


美团-不可不说的Java“锁”事


一、大厂面试题复盘

二、乐观锁和悲观锁

①:悲观锁




②:乐观锁



三、通过8种锁情况演示锁运行案例,看看我们到底锁的是什么

1.锁相关的8种案例演示code


多线程8锁问题

2.synchronized有三种应用方式



3.从字节码角度分析synchronized实现


四、公平锁和非公平锁

1.何为公平锁/非公平锁?


2.面试题:为什么会有公平锁/非公平锁的设计?为什么默认非公平。

3.面试题:什么时候用公平锁?什么时候用非公平锁?


五、可重入锁(又名递归锁)

①:"可重入锁"这四个字分开来解释

②:可重入锁种类






六、死锁和排查

1.死锁是什么



2.如何排查死锁


七、synchronized与锁升级


1.synchronized锁种类及升级步骤

①:升级流程


②:无锁


③:偏向锁

是什么

主要作用

@Data
@AllArgsConstructor
@NoArgsConstructor
class Ticket{//资源类,模拟3个售票员卖完50张票
    Object lockObject=new Object();
    private int number=50;
    public void sale(){
        synchronized (lockObject){
            if (number>0){
                System.out.println(Thread.currentThread().getName()+" 卖出第:"+(number--)+" 还剩下:"+number);
            }
        }
    }
}

public class SaleTicketDemo {
    public static void main(String[] args)  {
        Ticket ticket=new Ticket();
        new Thread(()->{ for (int i = 0; i < 55; i++) { ticket.sale(); } },"a").start();
        new Thread(()->{ for (int i = 0; i < 55; i++) { ticket.sale(); } },"b").start();
        new Thread(()->{ for (int i = 0; i < 55; i++) { ticket.sale(); } },"c").start();
    }
}


偏向锁的持有




偏向锁JVM命令





偏向锁的撤销




④:轻量级锁

是什么

主要作用

64位标记图

轻量级锁获取




code演示

自旋达到一定次数和程度


轻量锁和偏向锁的区别与不同

⑤:重锁


⑥:小总结


锁升级发生后,hashcode去哪啦



各种锁优缺点、synchronized锁升级和实现原理



2.JIT编译器多锁的优化

锁消除

锁粗化


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值