减少锁竞争的两种方式JAVA

2021/7/27 22:06:05

本文主要是介绍减少锁竞争的两种方式JAVA,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  1. 缩小锁的范围(快进快出)
    在并发程序中,对可伸缩性的主要威胁就是独占方式的资源锁

有三种方式可以降低锁的竞争程度,减少锁的持有时间,降低锁的请求频率,使用带有协调机制的独占锁

(1) 缩小锁的范围

public class AttributeStore{
  private final Map<String,String> attribute = new HashMap<>();

  public synchronized boolean userLocationMatched(String name,String regex){
  String key = "users"+name
  String location = attributes.get(key);
  if(location == null){
    return false;
  }else{
    return Pattern.matches(regex,location);
  }
}
}

public class BAttributesStore{
  ...

  public boolean userLocationMatches(String name,String regex){
  String key = "users"+name;
  String location;
  synchronized(this){
    location = attrinutes.get(key);
  }
  if(location == null){
    return false;
  }else{
    return Pattern.matches(regex,location);
  }
  }
}

减小锁粒度

```java
public class ServerStatus{
  public final Set<String> users;
  public final Set<String> queries;
  ...
  public synchronized void addUser(String u){
    users.add(u);
  }

  public synchronized void addQuery(String q){
    queries.add(q);
  }
}


public class ServerStatus{
  public final Set<String> users;
  public final Set<String> queryies;
  ...
  public void addUser(String u){
    synchronized(users){
      users.add(u);
    }
  }


  public void addQuery(String q){
    synchronized(queries){
      queries.add(q);
    }
  }
}



这篇关于减少锁竞争的两种方式JAVA的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程