1. 程式人生 > >ReentrantLock 中 Mutex 的lock()和trylock()方法的區別

ReentrantLock 中 Mutex 的lock()和trylock()方法的區別

lock()與trylock()的實現如下:

lock是通過同步器的模板方法acquire實現的

trylock是自定義的過載方法tryAcquire()

示例實現如下:

lock函式和tryLock函式都是用於鎖定物件,但他們之間有一定的區別:

lock函式是阻塞的,(因為它呼叫WaitForSingleObject函式時傳遞的第二個引數是INFINITE,表示無限等待下去,所以是阻塞的?)。  tryLock函式時非阻塞的,呼叫後立即返回。因為它呼叫WaitForSingleObject函式時傳遞的第二個引數是0,表示不等待,立即返回。 

lock()方法是一個無條件的鎖,與synchronize意思差不多,但是另一個方法 tryLock()方法只有在成功獲取了鎖的情況下才會返回true,如果別的執行緒當前正持有鎖,則會立即返回false!如果為這個方法加上timeout引數,則會在等待timeout的時間才會返回false或者在獲取到鎖的時候返回true。 (原文:https://blog.csdn.net/Lanal11/article/details/79922058?utm_source=copy ) 其中加上timeout引數的trylock()是通過tryAcquireNanos來實現的

呼叫lock或者tryLock後,都需要呼叫unlock來解鎖。