锁实现基于状态
问题描述:
如果我有这样的方法:锁实现基于状态
public class Main()
{
public void Start()
{
if(//Check if another thread already invoked this method and its in processing//)
DoSomething();
}
void DoSomething()
{
//Some code in here
}
}
如何使用锁来检查如果一个线程已经在执行时DoSomething的(),然后跳过它?
我知道锁会让其他呼叫等待,但我想跳过而不是等待并执行。
答
您可以使用
的tryLock
布尔的tryLock() 获取锁,只有当它是免费的,在调用的时候。 如果可用,则获取该锁,并立即返回值为真的锁。如果锁定不可用,则此方法将立即返回false值。
此方法的典型用法成语将是:
Lock lock = ...;
if (lock.tryLock()) {
try {
// manipulate protected state
} finally {
lock.unlock();
}
} else {
// perform alternative actions
}
这种用法确保如果它被获取锁被解锁,并且不会尝试解锁如果没有获取锁定。 返回: 如果获得了锁定,则返回true,否则返回false
如果在锁定释放后再次调用该方法会怎样? – cassandrad
第一次尝试调用获取应该获得锁定 – Puneet