相关疑难解决方法(0)

对象锁定私有类成员 - 最佳实践?(JAVA)

前几天我问了一个类似的问题,但对回复不满意,主要是因为我提供的代码有一些人们关注的问题.

基本上,在Java中锁定私有成员的最佳做法是什么?假设每个私有字段只能单独操作而不能一起操作(比如下面我的Test类示例),你应该直接锁定每个私有字段(例1),还是应该使用每个私有字段的一般锁定对象来锁定(例2)?

示例1:直接锁定私有字段

class Test {
  private final List<Object> xList = new ArrayList<Object>();
  private final List<Object> yList = new ArrayList<Object>();

  /* xList methods */ 

  public void addToX(Object o) {
    synchronized(xList) {
      xList.add(o);
    }
  }

  public void removeFromX(Object o) {
    synchronized(xList) {
      xList.remove(o);
    }
  }

  /* yList methods */ 

  public void addToY(Object o) {
    synchronized(yList) {
      yList.add(o);
    }
  }

  public void removeFromY(Object o) {
    synchronized(yList) {
      yList.remove(o);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

示例2:每个私有字段使用锁定对象

class Test {
  private final Object xLock = …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading deadlock locking

3
推荐指数
1
解决办法
2240
查看次数

标签 统计

concurrency ×1

deadlock ×1

java ×1

locking ×1

multithreading ×1