我如何在Android中创建一个锁(concurrent.locks.Lock)



这肯定很明显,但我找不到答案。我需要在变量周围加一个锁,以确保避免两个竞态危险条件。在我看来,一个非常简单的解决方案是使用锁,根据android文档:

Lock l = ...;
l.lock();
try {
    // access the resource protected by this lock
 }
 finally {
     l.unlock();
 }

到目前为止,一切顺利。然而,我不能让第一行工作。看起来像是:

Lock l = new Lock();

可能是正确的,但是eclipse报告"Cannot instantiate the type Lock"——仅此而已。

有什么建议吗?

如果您非常热衷于使用Lock,则需要选择Lock实现,因为您无法实例化接口。根据文件你有三个选择:

  • ReentrantLock
  • 这不是一个锁本身,而是一个助手类,因为Condition s绑定到Lock s。
  • ReadWriteLock

您可能正在寻找ReentrantLock可能与一些Condition s

这意味着你可以这样做,而不是Lock l = new Lock();:

ReentrantLock lock = new ReentrantLock();

然而,如果你只需要锁定一小部分,同步块/方法更简洁(如@Leonidos &@assylias)。

如果你有一个方法来设置这个值,你可以这样做:

public synchronized void setValue (var newValue)
{
  value = newValue;
}

或者如果这是一个更大的方法的一部分:

public void doInfinite ()
{
  //code
  synchronized (this)
  { 
    value = aValue;
  }
}

仅仅因为Lock是一个接口,不能被实例化。使用它的子类

相关内容

最新更新