synchronized 到底锁的是什么?

synchronized

实现线程同步,在多个线程争抢一个资源的时候保证只有一个线程能获取资源,保证数据不会出错。

synchronized 到底锁的是什么?

修饰方法

静态方法(类方法)

给静态方法添加 synchronized 关键字后,该类的被 synchronized 标识的静态方法一次只能被一个线程调用(获得锁),调用期间(占用锁)其它线程不允许调用被 synchronized 标识的静态方法(未获得锁),而没有添加 synchronized 关键字的静态方法(没有锁)可以被多个线程随时随意调用。

非静态方法

给非静态方法添加 synchronized 关键字后,该类的实例对象的被 synchronized 标识的非静态方法一次只能被一个线程调用(获得锁),调用期间(占用锁)其它线程不允许调用被 synchronized 标识的非静态方法(未获得锁),而没有添加 synchronized 关键字的非静态方法(没有锁)可以被多个线程随时随意调用。

修饰代码块

public void func() {       
    // Do something        
    synchronized (Object) {
        // Do something    
    }                      
    // Do something        
}                          

synchronized 修饰的代码块锁的是传入的 Object 对象,当一个线程获得此锁后,在执行被修饰代码块的过程中,其它线程无法执行该代码块,待获得锁后才能执行该代码块。

以上仅为个人学习总结,欢迎交流指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡森Zfans

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值