北京列举网 > 教育培训 > 电脑/网络 > 拉勾教育Java开发之高并发锁的三种实现方法
北京
[切换城市]

拉勾教育Java开发之高并发锁的三种实现方法

更新时间:2020-09-23 14:00:00 浏览次数:42次
区域: 北京 > 海淀 > 中关村
类别:网络工程师培训
地址:创业大街
高并发(High Concurrency)通常是指在同一个时间点,有很多用户同时的访问同一API接口或者URL地址。高并发是随着分布式系统的问世而出现的,是Java工程师必须要掌握的技能之一。接下来拉勾IT课小编为大家分析,如何使用该程序

1、乐观锁
乐观锁使用的场景是:读不会冲突、写会冲突,同时读的频率远大于写。
参考代码:
public object get(Object obj){
Object val =null;
if(val=map.get(key)==null){
//当map取值为null时再加锁判断
synchronized(map){
if(map.get(key)==null){
set some value;
    }
  }
  }
return map.get(key);
}
乐观的认为在读的时候不会产生冲突为题,在写时添加锁。所以解决的应用场景是读远大于写时的场景。

2、S***tern()
乐观锁不能很好的解决大量的写冲突的问题,因为很多场景下,锁只是针对某个用户或者某个订单。然而由于网络问题,用户在创建session的请求和后续的请求可能会同时到达,并行线程会优先处理后面的请求,这就催生了行锁和数据库表锁的概念,显然行锁的并发能力比表锁高很多,使用S***tern()是这种方式的具体实现。

3、类ConcurrentHashMap
S***ter()的缺陷是类String维护一个字符串池是放在JVM perm区的,如果用户数特别多,导致放入字符串池的String不可控,有可能导致OOM错误或者过多的Full GC。怎么样能控制锁的个数,同时减小粒度锁呢?你可以借鉴ConcurrentHashMap的方式,将需要加锁的对象分为多个bucket,每个bucket加一个锁。伪代码如下:



类String维护了一个字符串池,当调用intern方法时,如果池已经包含一个等于此String对象的字符串(该对象由equals(Object)方法确定),则返回池中的字符串。当String 相同时,总返回同一个对象,因此就实现了对同一用户加锁。由于所的颗粒度局限于具体用户,使得系统获得大程度的并发。

灵活的在线学习可以掌握每一个程序细节,同时增强程序的使用,并且完善的编写模式,可以加强程序的严谨性以及后续开发人员的合理化衔接,增强编写的流畅,不断提升程序应用的效率模式
北京电脑/网络相关信息
4月23日
办公软件培训
平谷-平谷城区
4月19日
办公软件培训
平谷-平谷城区
4月11日
办公软件培训
平谷-平谷城区
4月9日
办公软件培训
平谷-平谷城区
4月7日
4月1日
注册时间:2020年08月17日
UID:706396
---------- 认证信息 ----------
手机已认证
查看用户主页