synchronized对象锁和类锁的区别

为什么使用synchronized

在多线程中如果多个线程同时访问某一资源,会造成不可预计的结果。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块。

synchronized什么时候是对象锁:

当synchronized作用在非静态的方法时是对象锁

synchronized public void getName(){}

1.对象锁的特征:

1.同个对象在多个线程中去调用synchronized作用的代码块,方法时需要获取对象锁。一个对象的对象锁是唯一的,只有一个线程可以拿到,因此当有线程在执行synchronized的方法时,其他线程需要进入阻塞队列等待。

2.同个对象在多个线程中去调用不同的synchronized方法时也是需要等待。

synchronized什么时候是类锁:

1.当synchronized作用在静态方法上

synchronized static public void getName(){}

2.在代码块中调用

synchronized(.class){}

类锁的特征

1.类的不同对象在多个线程中去调用synchronized作用的代码块、方法时需要获取对象锁。一个类的类锁是唯一的,只有一个线程可以拿到,因此当有对象在线程执行synchronized的方法时,其他线程的对象需要进入阻塞队列等待。

2.同个类的不同对象在多个线程中去调用不同的synchronized方法时也是需要等待的。

因此我们可以总结得到:类锁它的范围是类的所有对象,对象锁的范围是同一个对象。

概述:锁分为对象锁和类锁,当synchronized作用在非静态的方法或用对象作为锁时时对象锁,当synchronized作用在静态方法上或用类作为锁时是类锁。

重点:针对对象锁,同个对象在多个线程中去调用不同的synchronized方法是也是需要等待的。

针对类锁,同个类的不同对象在多个线程中去调用不同的synchronized方法时也是需要等待的

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值