使用ReentrantLock兩個方法的互斥訪問

2021-08-08 17:26:02 字數 1127 閱讀 5699

現在有多個執行緒需要對兩個方法都進行訪問(乙個方法名為test1,乙個方法名為test2),但是有個要求:

同乙個時間只能兩個方法互斥訪問,而且兩個方法可能在不同的類裡面。就是多個執行緒只要有乙個執行緒訪問test1方法,那麼其他執行緒test1和test2方法都不能訪問,相反一樣。

可能有人會想到synchronized關鍵字,但是如果兩個方法是在同乙個類中,這種辦法能行得通,萬一不在同乙個類中,那用synchronized就沒有任何意義。

當然可以用concurrent包裡面的atomicboolean來作為鎖關鍵字,略,這裡就簡單列個使用reentrantlock**:

public

static reentrantlock lock = new reentrantlock();

public

static

void

main(string args) throws interruptedexception

}.start();

new thread()

}.start();

}public

static

void

test1() catch (interruptedexception e) finally

}public

static

void

test2() catch (interruptedexception e) finally

}

當不使用lock的時候很明顯test1和test2在同時執行:

aaaaaaaa

bbbbbbbb

bbbbbbbb

aaaaaaaa

process finished with

exit code 0

當使用lock的時候很明顯test1和test2是互斥執行:

bbbbbbbb

bbbbbbbb

aaaaaaaa

aaaaaaaa

process finished with

exit code 0

ReentrantLock使用示例

reentrantlock是獨佔鎖 lock鎖的使用,把鎖和要用鎖同步的 放在一起,這裡就是放在printer類中了 獲取到鎖後,最後要在finally 塊中手動釋放鎖 public class locktest catch interruptedexception e printer.print ...

ReentrantLock介紹和簡單使用

reentrantlock和synchronized比較 1 reentrantlock和synchronized都是獨佔鎖,前者需要主動的加鎖和釋放鎖,後者加鎖解鎖的過程會自動進行。2 reentrantlock和synchronized都是可重入的,前者加鎖和釋放鎖的次數必須一致,否則會一直進入...

ReentrantLock實現同步

reentrantlock 也可以實現synchronized方法 塊的同步效果。reentrantlock 實現同步 如下 1 新建乙個service類 public class myservice public static void methodb 2 新建乙個測試類 public class...