2017-08-23 120 views
0

如果我有这样的方法:锁实现基于状态

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的(),然后跳过它?

我知道锁会让其他呼叫等待,但我想跳过而不是等待并执行。

回答

0

您可以使用

的tryLock

布尔的tryLock() 获取锁,只有当它是免费的,在调用的时候。 如果可用,则获取该锁,并立即返回值为真的锁。如果锁定不可用,则此方法将立即返回false值。

此方法的典型用法成语将是:

Lock lock = ...; 
    if (lock.tryLock()) { 
     try { 
      // manipulate protected state 
     } finally { 
      lock.unlock(); 
     } 
    } else { 
     // perform alternative actions 
    } 

这种用法确保如果它被获取锁被解锁,并且不会尝试解锁如果没有获取锁定。 返回: 如果获得了锁定,则返回true,否则返回false

+0

如果在锁定释放后再次调用该方法会怎样? – cassandrad

+0

第一次尝试调用获取应该获得锁定 – Puneet