synchronized与static synchronized的区别

synchronized是实例锁,作用于当前实例,防止其他线程同时访问。staticsynchronized是类锁,限制所有实例同时访问类的同步代码块。不同实例的synchronized方法可同时访问,而不同实例的staticsynchronized方法不能。实例锁与类锁互不影响。
摘要由CSDN通过智能技术生成

synchronized与static synchronized的区别

synchronized是实例锁,对类的当前实例进行加锁,防止其他线程同时访问该实例的所有synchronized块。

注意这里是类的当前实例, 类的两个不同实例就没有这种约束了
static synchronized是类锁,控制类的所有实例的并发访问,限制多线程中该类的所有实例同时访问JVM中该类所对应的代码块。

例题讲解

  假如有Something类的两个实例x与y,那么下列各组方法被多线程同时访问的情况是怎样的?

pulbic class Something{
    public synchronized void isSyncA(){}
    public synchronized void isSyncB(){}
    public static synchronized void cSyncA(){}
    public static synchronized void cSyncB(){}
}

A.  x.isSyncA() 与 x.isSyncB()   
B.  x.isSyncA() 与 y.isSyncA()  
C.  x.cSyncA() 与 y.cSyncB()  
D.  x.isSyncA() 与 Something.cSyncA()


A: 不能被同时访问,原因:是对相同实例x的不同synchronized域访问。

B: 可以被同时访问,原因:是对不同实例x和y的相同synchronized域访问。

C: 不能被同时访问,原因:是对不同实例x和y的不同static synchronized域访问。

D: 可以被同时访问,原因:是对实例x的synchronized域和类Something的static synchronized域同时访问。

总结

synchronized锁的是实例对象,static synchronized锁的是类对象
若实例被锁,则该实例的所有同步方法全部被锁
若类被锁,则该类的所有同步方法全部被锁
实例锁与类锁之间互不干扰
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值