减少锁竞争的两种方式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);
    }
  }
}

猜你喜欢

转载自blog.csdn.net/weixin_37632716/article/details/119152852