現在有多個執行緒需要對兩個方法都進行訪問(乙個方法名為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...