--- jsr166/src/test/tck/ReentrantReadWriteLockTest.java 2011/03/15 19:47:07 1.44 +++ jsr166/src/test/tck/ReentrantReadWriteLockTest.java 2011/05/02 00:06:45 1.48 @@ -59,6 +59,15 @@ public class ReentrantReadWriteLockTest } /** + * Releases lock, checking that it had a hold count of 1. + */ + void releaseLock(ReentrantReadWriteLock.WriteLock lock) { + assertTrue(lock.isHeldByCurrentThread()); + lock.unlock(); + assertFalse(lock.isHeldByCurrentThread()); + } + + /** * Constructor sets given fairness, and is in unlocked state */ public void testConstructor() { @@ -190,21 +199,16 @@ public class ReentrantReadWriteLockTest */ public void testWriteLockInterruptibly_Interrupted() throws Exception { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + lock.writeLock().lock(); + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lockInterruptibly(); - lock.writeLock().unlock(); - lock.writeLock().lockInterruptibly(); - lock.writeLock().unlock(); }}); - lock.writeLock().lock(); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); - Thread.sleep(SHORT_DELAY_MS); - lock.writeLock().unlock(); t.join(); + releaseLock(lock.writeLock()); } /** @@ -213,16 +217,15 @@ public class ReentrantReadWriteLockTest public void testWriteTryLock_Interrupted() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().tryLock(SMALL_DELAY_MS, MILLISECONDS); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); - lock.writeLock().unlock(); t.join(); + releaseLock(lock.writeLock()); } /** @@ -231,17 +234,15 @@ public class ReentrantReadWriteLockTest public void testReadLockInterruptibly_Interrupted() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.readLock().lockInterruptibly(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); - Thread.sleep(SHORT_DELAY_MS); - lock.writeLock().unlock(); t.join(); + releaseLock(lock.writeLock()); } /** @@ -250,12 +251,11 @@ public class ReentrantReadWriteLockTest public void testReadTryLock_Interrupted() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.readLock().tryLock(LONG_DELAY_MS, MILLISECONDS); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); @@ -268,12 +268,11 @@ public class ReentrantReadWriteLockTest public void testWriteTryLockWhenLocked() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertFalse(lock.writeLock().tryLock()); }}); - t.start(); t.join(); lock.writeLock().unlock(); } @@ -284,12 +283,11 @@ public class ReentrantReadWriteLockTest public void testReadTryLockWhenLocked() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertFalse(lock.readLock().tryLock()); }}); - t.start(); t.join(); lock.writeLock().unlock(); } @@ -300,13 +298,12 @@ public class ReentrantReadWriteLockTest public void testMultipleReadLocks() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); }}); - t.start(); t.join(); lock.readLock().unlock(); } @@ -317,19 +314,17 @@ public class ReentrantReadWriteLockTest public void testWriteAfterMultipleReadLocks() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - t1.start(); - t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.readLock().unlock(); t1.join(MEDIUM_DELAY_MS); @@ -344,19 +339,17 @@ public class ReentrantReadWriteLockTest public void testReadAfterWriteLock() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - t1.start(); - t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().unlock(); t1.join(MEDIUM_DELAY_MS); @@ -383,19 +376,17 @@ public class ReentrantReadWriteLockTest public void testReadHoldingWriteLock2() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - t1.start(); - t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); @@ -415,19 +406,17 @@ public class ReentrantReadWriteLockTest public void testReadHoldingWriteLock3() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - t1.start(); - t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); @@ -448,19 +437,17 @@ public class ReentrantReadWriteLockTest public void testWriteHoldingWriteLock4() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - t1.start(); - t2.start(); lock.writeLock().lock(); lock.writeLock().unlock(); Thread.sleep(SHORT_DELAY_MS); @@ -492,19 +479,17 @@ public class ReentrantReadWriteLockTest public void testReadHoldingWriteLockFair2() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.readLock().lock(); lock.readLock().unlock(); }}); - t1.start(); - t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); @@ -525,19 +510,17 @@ public class ReentrantReadWriteLockTest public void testReadHoldingWriteLockFair3() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - t1.start(); - t2.start(); lock.readLock().lock(); lock.readLock().unlock(); Thread.sleep(SHORT_DELAY_MS); @@ -558,19 +541,17 @@ public class ReentrantReadWriteLockTest public void testWriteHoldingWriteLockFair4() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); lock.writeLock().lock(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() { lock.writeLock().lock(); lock.writeLock().unlock(); }}); - t1.start(); - t2.start(); Thread.sleep(SHORT_DELAY_MS); assertTrue(lock.isWriteLockedByCurrentThread()); assertEquals(1, lock.getWriteHoldCount()); @@ -593,31 +574,27 @@ public class ReentrantReadWriteLockTest public void testTryLockWhenReadLocked() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); }}); - t.start(); t.join(); lock.readLock().unlock(); } - - /** * write tryLock fails when readlocked */ public void testWriteTryLockWhenReadLocked() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertFalse(lock.writeLock().tryLock()); }}); - t.start(); t.join(); lock.readLock().unlock(); } @@ -629,13 +606,12 @@ public class ReentrantReadWriteLockTest public void testTryLockWhenReadLockedFair() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); lock.readLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertTrue(lock.readLock().tryLock()); lock.readLock().unlock(); }}); - t.start(); t.join(); lock.readLock().unlock(); } @@ -648,12 +624,11 @@ public class ReentrantReadWriteLockTest public void testWriteTryLockWhenReadLockedFair() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true); lock.readLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() { assertFalse(lock.writeLock().tryLock()); }}); - t.start(); t.join(); lock.readLock().unlock(); } @@ -666,12 +641,11 @@ public class ReentrantReadWriteLockTest public void testWriteTryLock_Timeout() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { assertFalse(lock.writeLock().tryLock(1, MILLISECONDS)); }}); - t.start(); t.join(); assertTrue(lock.writeLock().isHeldByCurrentThread()); lock.writeLock().unlock(); @@ -683,12 +657,11 @@ public class ReentrantReadWriteLockTest public void testReadTryLock_Timeout() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lock(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { assertFalse(lock.readLock().tryLock(1, MILLISECONDS)); }}); - t.start(); t.join(); assertTrue(lock.writeLock().isHeldByCurrentThread()); lock.writeLock().unlock(); @@ -701,12 +674,11 @@ public class ReentrantReadWriteLockTest public void testWriteLockInterruptibly() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lockInterruptibly(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lockInterruptibly(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); Thread.sleep(SHORT_DELAY_MS); @@ -720,12 +692,11 @@ public class ReentrantReadWriteLockTest public void testReadLockInterruptibly() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); lock.writeLock().lockInterruptibly(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.readLock().lockInterruptibly(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); @@ -799,14 +770,13 @@ public class ReentrantReadWriteLockTest public void testAwait() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); c.signal(); @@ -876,14 +846,13 @@ public class ReentrantReadWriteLockTest public void testAwait_Interrupt() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); @@ -896,14 +865,13 @@ public class ReentrantReadWriteLockTest public void testAwaitNanos_Interrupt() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); c.awaitNanos(MILLISECONDS.toNanos(LONG_DELAY_MS)); lock.writeLock().unlock(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); @@ -916,7 +884,7 @@ public class ReentrantReadWriteLockTest public void testAwaitUntil_Interrupt() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t = new Thread(new CheckedInterruptedRunnable() { + Thread t = newStartedThread(new CheckedInterruptedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); java.util.Date d = new java.util.Date(); @@ -924,7 +892,6 @@ public class ReentrantReadWriteLockTest lock.writeLock().unlock(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(SHORT_DELAY_MS); @@ -937,22 +904,20 @@ public class ReentrantReadWriteLockTest public void testSignalAll() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t1 = new Thread(new CheckedRunnable() { + Thread t1 = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); }}); - Thread t2 = new Thread(new CheckedRunnable() { + Thread t2 = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); c.await(); lock.writeLock().unlock(); }}); - t1.start(); - t2.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); c.signalAll(); @@ -1221,7 +1186,7 @@ public class ReentrantReadWriteLockTest public void testHasWaiters() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); assertFalse(lock.hasWaiters(c)); @@ -1230,7 +1195,6 @@ public class ReentrantReadWriteLockTest lock.writeLock().unlock(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); assertTrue(lock.hasWaiters(c)); @@ -1252,7 +1216,7 @@ public class ReentrantReadWriteLockTest public void testGetWaitQueueLength() throws InterruptedException { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); final Condition c = lock.writeLock().newCondition(); - Thread t = new Thread(new CheckedRunnable() { + Thread t = newStartedThread(new CheckedRunnable() { public void realRun() throws InterruptedException { lock.writeLock().lock(); assertFalse(lock.hasWaiters(c)); @@ -1261,7 +1225,6 @@ public class ReentrantReadWriteLockTest lock.writeLock().unlock(); }}); - t.start(); Thread.sleep(SHORT_DELAY_MS); lock.writeLock().lock(); assertTrue(lock.hasWaiters(c));