java锁

  • 乐观锁

        乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,采取在写时先获取当前版本号,然后加锁的操作,如果失败,则要重复读-比较-写的操作;java中的乐观锁基本都是彩玉CAS算法实现的,比较当前值和传入值是否一样,一样则更新;

  • 悲观锁

        悲观锁是一种悲观思想,即认为写多,如synchronized,行锁表锁等

  • 自旋锁

        当持有锁的线程很短时间释放资源,那其他的线程无需进入阻塞状态,只需要自旋等待,等持有锁的线程释放锁后立即获取锁。

synchronsized作用范围

1、作用于方法时,锁住的是对象的实例,this;

2、作用于静态方法时,锁住的是class实例,永久带时共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程

CAS算法

比较并交换,cas算法包含三个值,内存中的值,预估值和即将修改的新增,当预估值和北村中的值相等时才会更新为即将修改的新增。cas是一种无锁算法。

CAS非阻塞,可以避免优先级倒置和死锁问题;性能好,为无锁算法;

ABA问题:当cas比较预估值和内存中的值时,若一致则认为未修改则更新,需要使用java的原子引用类,通过控制数值的版本来保证cas的准确性;

死锁问题

1、互斥条件:一个资源只能被一个线程持有直到释放

2、不可抢占:线程不可抢占其他线程已持有的资源

3、请求和保持:线程在等待其他资源时对持有的资源不释放

4、循环等待:线程A持有线程B的资源等待线程B持有的资源,线程死锁;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值