版本为 openjdk8 ,源码在 java.util.concurrent.locks.ReentrantReadWriteLock ,268 行左右
static final int SHARED_SHIFT = 16;
ststatic final int EXCLUSIVE_MASK = (1 << SHARED_SHIFT) - 1;
static int sharedCount(int c) { return c >>> SHARED_SHIFT; }
static int exclusiveCount(int c) { return c & EXCLUSIVE_MASK; }
读锁和写锁的计数只用了一个变量来表示,也就是上述代码里的变量 c ,为什么不用两个变量来分别表示读锁和写锁计数呢?
static final int SHARED_SHIFT = 16;
ststatic final int EXCLUSIVE_MASK = (1 << SHARED_SHIFT) - 1;
static int sharedCount(int c) { return c >>> SHARED_SHIFT; }
static int exclusiveCount(int c) { return c & EXCLUSIVE_MASK; }
读锁和写锁的计数只用了一个变量来表示,也就是上述代码里的变量 c ,为什么不用两个变量来分别表示读锁和写锁计数呢?