java中给一个类上锁_Java中锁类型的介绍

Java中锁类型的介绍

发布时间:2020-06-28 13:24:58

来源:亿速云

阅读:77

作者:Leah

这期内容当中小编将会给大家带来有关Java中锁类型的介绍,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1、自旋锁

自旋锁顾名思义,它会等待一定时间(自旋),在这期中会什么都不做就是等资源被释放,好处在于没有了内核态用户态切换的效率损失,但是如果它一直不能访问到资源的话就会一直占用cpu资源,所以它会循环一段时间后进入阻塞状态。

2、重量级锁

synchronized就是重量级锁的实现机制,抢不到资源的进程会进入阻塞状态。

3、偏向锁

顾名思义,它会偏向第一个访问资源的进程,如果说只有一个进程执行同步代码块,那么就会上个偏向锁,如果有其他线程抢占资源,那么就会升级为轻量级锁。

4、轻量级锁

偏向锁升级之后就是轻量级锁,锁只可以升级而不可以降级。轻量级锁中的其他进程会进入自选状态,如果说自选失败,就会升级会重量级锁。

5、公平、非公正锁

主要是指线程是否先来后到拿到锁,synchronized是非公平的,而ReentrantLock默认非公平,可以设置为公平锁。

6、悲观锁

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。

传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

7、乐观锁

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制(数据库中)和CAS算法实现。

上述就是小编为大家分享的Java中锁类型的介绍了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

你可能感兴趣的:(java中给一个类上锁)