这肯定很明显,但我找不到答案。我需要在变量周围加一个锁,以确保避免两个竞态危险条件。在我看来,一个非常简单的解决方案是使用锁,根据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 这不是一个锁本身,而是一个助手类,因为
- ReadWriteLock
Condition
s绑定到Lock
s。您可能正在寻找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
是一个接口,不能被实例化。使用它的子类