synchronized

synchronized

synchronized的作用域有两种

  • 每个对象实例内

    synchronized修饰普通方法:synchronized aMethod(){},在同一时刻最多一个线程访问这个对象的synchronized方法(当一个对象存在多个synchronized方法时,只要有一个线程访问了其中的一个synchronized方法,那么其他线程就不能访问这个对象的任何synchronized方法,可以访问没synchronized修饰的方法)。不同的对象实例的synchronized方法是不相干扰的,其他线程照样可以访问相同类的另一个实例中的synchronized方法。

    synchronized (this) {…代码块…},表示只对这个区块的资源实行互斥访问。

  • 某个类的范围

    synchronized修饰static方法:synchronized static aMethod(){},防止多线程访问这个类的所有对象实例的synchronized static方法

synchronized不被继承:父类的synchronized aMethod(){},通过继承到子类变成 aMethod(){}。

synchronized用在代码块和方法上的区别

  • synchronized 用在代码块,锁的是调用该方法的对象(this),也可以选择锁住任何一个对象
  • synchronized 用在方法上,锁的是调用该方法的对象
  • synchronized 用在代码块可以减小锁的粒度,从而提高并发性能

synchronized 与static synchronized 的区别

  • synchronized 是对类的当前实例进行加锁
  • static synchronized 是控制类的所有实例的访问

synchronized与lock的区别

  • synchronized(隐式锁)采用的是CPU悲观锁机制,即线程获得的是独占锁。其他线程只能依靠阻塞来等待线程锁的释放
  • lock(显示锁)用的是乐观锁方式。每次不加锁而是假设没有冲突的去完成某些操作,如果因为冲突失败就重试,直到成功为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值