こんにちは、Java の ReadWriteLock について読んだことがありますが、その再入可能部分を理解しているかどうかはわかりません。1 つのメイン スレッドのみを使用して再入可能性を示す 2 つの簡単なコード例を次に示します。
public class Locks {
public static void main( String[] args ) {
ReadWriteLock lock = new ReentrantReadWriteLock();
lock.writeLock().lock();
lock.readLock().lock();
System.out.println( "Reentrance acheieved" );
lock.readLock().unlock();
lock.writeLock().unlock();
}
}
そして2番目の例
public class Locks {
public static void main( String[] args ) {
ReadWriteLock lock = new ReentrantReadWriteLock();
lock.readLock().lock();
lock.writeLock().lock();
System.out.println( "Reentrance acheieved" );
lock.writeLock().unlock();
lock.readLock().unlock();
}
}
最初のものでは sysout が実行されますが、2 番目のものでは実行されません。なぜですか? 両方のロックは同じスレッドによって取得されるため、ここでは再入可能な状況がありますが、書き込みロックが最初に取得された場合にのみ入口が達成されます。その他の操作 (書き込みまたは読み取り)。