如果我有这样的方法:
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
}
}
如何使用lock检查线程是否已经在执行DoSomething()然后跳过它?
我知道lock会让其他调用等待,但我想跳过而不是等待并执行。
答案 0 :(得分:0)
您可以使用
的tryLock
布尔tryLock() 只有在调用时它是空闲的才能获取锁。 获取锁定(如果可用)并立即返回值true。如果锁定不可用,则此方法将立即返回值false。
此方法的典型用法习惯是:
Lock lock = ...;
if (lock.tryLock()) {
try {
// manipulate protected state
} finally {
lock.unlock();
}
} else {
// perform alternative actions
}
此用法可确保锁定在获取时解锁,并且如果未获取锁定则不会尝试解锁。 返回: 如果获得了锁定,则为true,否则为