如何在Android中创建Lock(concurrent.locks.Lock)?

时间:2013-01-06 21:24:39

标签: java android locking

这一定非常明显,但我无法找到答案。我需要锁定变量以确保避免一些种族危险情况。从我所看到的,根据android docs:

,使用Lock存在一个非常简单的解决方案
Lock l = ...;
l.lock();
try {
    // access the resource protected by this lock
 }
 finally {
     l.unlock();
 }

到目前为止,这么好。但是,我不能让第一线工作。它看起来像是:

Lock l = new Lock();

可能是正确的,但是eclipse报告说,“无法实例化Lock类型” - 而且不再存在。

有什么建议吗?

2 个答案:

答案 0 :(得分:13)

如果您非常热衷于使用Lock,则需要选择Lock实施,因为无法实例化接口。 根据{{​​3}} 你有3个选择:

你可能正在寻找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;
  }
}

答案 1 :(得分:1)

仅仅因为Lock是一个接口而无法实例化。使用它的子类。