![](/img/trans.png)
[英]Can i change java.util.concurrent.locks.Lock into java.util.concurrent.locks.ReentrantReadWriteLock;
[英]How do I create a Lock (concurrent.locks.Lock) in Android?
这一定非常明显,但我无法找到答案。 我需要锁定变量以确保避免一些种族危险情况。 据我所知,根据android文档,使用Lock存在一个非常简单的解决方案:
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
}
finally {
l.unlock();
}
到现在为止还挺好。 但是,我不能让第一线工作。 看起来像是这样的:
Lock l = new Lock();
可能是正确的,但是eclipse报告说,“无法实例化类型Lock” - 而且不再存在。
有什么建议?
如果您非常热衷于使用Lock
,则需要选择Lock
实现,因为您无法实例化接口。 根据文档您有3个选择:
Condition
s绑定到Lock
s。 您可能正在寻找具有某些Condition
的ReentrantLock
这意味着代替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
是一个接口而无法实例化。 使用它的子类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.