1. 概念
再入可能な読み取り/書き込みロック: 読み取り/書き込みロックは、 ReadLock と WriteLock、および基礎となる層を維持します。は AQS. ですが、AQS の状態量は 1 つだけです。読み取りと書き込みを同時に制御するにはどうすればよいですか? ここでは、状態 (int) の上位 16 ビットは読み取りステータスを表すために使用され、下位 16 ビットは書き込みを表し、上位 16 ビットは読み取りロックを取得するスレッドの数を表し、下位 16 ビットは書き込みロックのリエントラント数を表します。
2. 原則
CAS AQS キューを使用して実装します。公平なロックと不公平なロックをサポートしています。両方の実装は
3、example
public class ReentrantDemo implements Runnable { Lock lock = new ReentrantLock(); @Override public void run() { set(); } public void set() { try { lock.lock(); System.out.println("set 方法"); get(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock();// 必须在finally中释放 } } public void get() { try { lock.lock(); System.out.println("get 方法"); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String[] args) { ReentrantDemo reentrantDemo = new ReentrantDemo(); new Thread(reentrantDemo).start(); } }
以上がReentrantLock のリエントラント特性を分析する Java テストの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。