java锁

哈哈哈,刚一朋友问我java锁里面有啥,想了一下,不知道怎么表达呀,太多了,在这里总结一下

 

所谓多种锁,都是相对而言的,不同的锁都是通过不同维度来说明的

 

悲观锁-乐观锁:

这是两种不同的思想,悲观锁认为有并发就玩完,数据会不一致。乐观锁认为有并发没问题,检查一下就行了。基于这个思想,出现了不同的实现,synchronized就是这么认为的,有线程进来,其他线程就不要进来了。ReentrantLock则会让线程去尝试。不过synchronized 本身给对象加锁的时候确使用了乐观锁思想(cas)

互斥锁、读写锁(共享锁):

互斥锁指我在用这个对象的时候你不能对他进行任何操作,看一眼也不行。读写锁就开放多了,我写的时候你不可以读,但没写的时候,多少个线程来读都没有关系。synchronized就是互斥锁,Lock下面的ReadWriteLock就是读写锁。

公平锁、非公平锁:锁的两种竞争策略。公平锁指每个线程获取对象有先后顺序,按进入先后进入排队,基于AQS接口,比如reentrantLock。非公平锁则像synchronized,靠本事竞争。

偏向锁、轻量级锁、重量级锁:这几个是java对象头的几个属性,其实除了这些还有是否GC(CMS算法时标记),偏向锁指我这个对象更加爱哪个线程,就像一大群相亲对象让中意的先上一样。轻量级锁指利用CAS机制不停的自旋达到想要的效果,比如synchronzied修饰静态代码块。重量级锁则声明一个变量说已经被锁住了,当然也是在自旋成功以后,synchronized修饰方法时就是如此。

信号量锁:这个简单,读写锁里面允许多个线程同时读,但为了系统负荷等需求,只允许N个线程同时读,这就是信号量

分段锁:这个是jdk1.7的ConcurrentHashMap提出的理念,就是不同的数据段采取不同的锁

自旋锁:就是CAS(aba问题)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值