8005697: Add StampedLock - JEP 155
Martin Buchholz
martinrb at google.com
Tue Jan 29 08:04:45 UTC 2013
On Mon, Jan 28, 2013 at 4:01 PM, Doug Lea <dl at cs.oswego.edu> wrote:
> I also noticed that I had failed to include the simple
> toString-based informal debug/monitoring aids that we've
> been doing for synchronizers.
Which suggests looking for other missing methods by comparing lock-like
classes.
Looking at the implementation of toString and comparing with RRWL suggests
(untested):
Index: src/main/java/util/concurrent/locks/StampedLock.java
===================================================================
RCS file:
/export/home/jsr166/jsr166/jsr166/src/main/java/util/concurrent/locks/StampedLock.java,v
retrieving revision 1.16
diff -u -r1.16 StampedLock.java
--- src/main/java/util/concurrent/locks/StampedLock.java 28 Jan 2013
23:54:42 -0000 1.16
+++ src/main/java/util/concurrent/locks/StampedLock.java 29 Jan 2013
07:56:20 -0000
@@ -886,6 +886,23 @@
}
}
+ private int getReadLockCount(long s) {
+ long readers;
+ if ((readers = s & RBITS) >= RFULL)
+ readers = RFULL + readerOverflow;
+ return (int) readers;
+ }
+
+ /**
+ * Queries the number of read locks held for this lock. This
+ * method is designed for use in monitoring system state, not for
+ * synchronization control.
+ * @return the number of read locks held
+ */
+ public int getReadLockCount() {
+ return getReadLockCount(state);
+ }
+
/**
* Returns a string identifying this lock, as well as its lock
* state. The state, in brackets, includes the String {@code
@@ -896,15 +913,11 @@
* @return a string identifying this lock, as well as its lock state
*/
public String toString() {
- long readers;
long s = state;
- if ((readers = s & RBITS) >= RFULL)
- readers = RFULL + readerOverflow;
- return super.toString() + ((s & WBIT) != 0L ?
- "[Write-locked]" :
- readers == 0 ?
- "[Unlocked]" :
- "[Read-locks:" + readers + "]");
+ return super.toString() +
+ ((s & ABITS) == 0L ? "[Unlocked]" :
+ (s & WBIT) != 0L ? "[Write-locked]" :
+ "[Read-locks:" + getReadLockCount(s) + "]");
}
// internals
More information about the core-libs-dev
mailing list