
このチュートリアルの動作環境: Windows7 システム、Java10 バージョン、DELL G3 コンピューター。
1. コンセプト
再入可能な読み取り/書き込みロック。読み取り/書き込みロックは内部的にReadLock と WriteLock を維持しますが、AQS には読み取りと書き込みを同時に制御する方法が 1 つだけあります。ここでは、状態 (int) が使用されます。ビットは読み取りステータスを表し、下位 16 ビットは書き込みを表し、上位 16 ビットは読み取りロックを取得しているスレッドの数を表し、下位 16 ビットは書き込みロックのリエントラント数を表します。 。
2. 原則
CAS+AQSキューを使用して実装されます。公平なロックと不公平なロックをサポートしており、この 2 つの実装は似ています。
3. 例
public class ReentrantDemo は Runnable {を実装します
ロック lock = new ReentrantLock();
@オーバーライド
public void run() {
セット();
}
public void set() {
試す {
ロック.ロック();
System.out.println("メソッドの設定");
得る();
} catch (例外 e) {
e.printStackTrace();
} ついに {
lock.unlock();//最終的に解放する必要がある }
}
パブリック void get() {
試す {
ロック.ロック();
System.out.println("get メソッド");
} catch (例外 e) {
e.printStackTrace();
} ついに {
ロック解除();
}
}
public static void main(String[] args) {
ReentrantDemo reentrantDemo = new ReentrantDemo();
new Thread(reentrantDemo).start();
}
}上記は Java ReentrantLock のリエントラント テストです。この記事をすべて読むと、誰もが ReentrantLock の使い方を最初に理解できるようになり、授業後にリエントラント ロックの関連内容を拡張することもできると思います。