このチュートリアルの動作環境: 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 の使い方を最初に理解できるようになり、授業後にリエントラント ロックの関連内容を拡張することもできると思います。