嗨,我已经阅读了 Java 中的 ReadWriteLock,但我不确定我是否掌握了它的重入部分。这是两个简短的代码示例,仅使用一个主线程来显示重入
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();
}
}
第二个例子
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,但在第二个中没有执行,这是为什么呢?两个锁都将由同一个线程获得,所以我们在这里有一个可重入的情况,但是只有在首先获得 writelock 时才能实现入口,这很奇怪,因为在不可重入的情况下,文档说写操作对所有线程都是独占的其他操作(无论是写还是读)。