这一定非常明显,但我无法找到答案。我需要锁定变量以确保避免一些种族危险情况。从我所看到的,根据android docs:
,使用Lock存在一个非常简单的解决方案Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
}
finally {
l.unlock();
}
到目前为止,这么好。但是,我不能让第一线工作。它看起来像是:
Lock l = new Lock();
可能是正确的,但是eclipse报告说,“无法实例化Lock类型” - 而且不再存在。
有什么建议吗?
答案 0 :(得分:13)
如果您非常热衷于使用Lock
,则需要选择Lock
实施,因为无法实例化接口。
根据{{3}}
你有3个选择:
Condition
被绑定到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;
}
}
答案 1 :(得分:1)
仅仅因为Lock
是一个接口而无法实例化。使用它的子类。