ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ReentrantReadWriteLockTest.java
(Generate patch)

Comparing jsr166/src/test/tck/ReentrantReadWriteLockTest.java (file contents):
Revision 1.32 by jsr166, Tue Nov 17 14:18:28 2009 UTC vs.
Revision 1.45 by jsr166, Sun May 1 23:49:41 2011 UTC

# Line 1 | Line 1
1   /*
2   * Written by Doug Lea with assistance from members of JCP JSR-166
3   * Expert Group and released to the public domain, as explained at
4 < * http://creativecommons.org/licenses/publicdomain
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5   * Other contributors include Andrew Wright, Jeffrey Hayes,
6   * Pat Fisher, Mike Judd.
7   */
# Line 9 | Line 9
9   import junit.framework.*;
10   import java.util.concurrent.locks.*;
11   import java.util.concurrent.*;
12 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
13   import java.io.*;
14   import java.util.*;
15  
16   public class ReentrantReadWriteLockTest extends JSR166TestCase {
17      public static void main(String[] args) {
18 <        junit.textui.TestRunner.run (suite());
18 >        junit.textui.TestRunner.run(suite());
19      }
20      public static Test suite() {
21 <        return new TestSuite(ReentrantReadWriteLockTest.class);
21 >        return new TestSuite(ReentrantReadWriteLockTest.class);
22      }
23  
24      /**
# Line 61 | Line 62 | public class ReentrantReadWriteLockTest
62       * Constructor sets given fairness, and is in unlocked state
63       */
64      public void testConstructor() {
65 <        ReentrantReadWriteLock rl = new ReentrantReadWriteLock();
65 >        ReentrantReadWriteLock rl = new ReentrantReadWriteLock();
66          assertFalse(rl.isFair());
67          assertFalse(rl.isWriteLocked());
68          assertEquals(0, rl.getReadLockCount());
69 <        ReentrantReadWriteLock r2 = new ReentrantReadWriteLock(true);
69 >        ReentrantReadWriteLock r2 = new ReentrantReadWriteLock(true);
70          assertTrue(r2.isFair());
71          assertFalse(r2.isWriteLocked());
72          assertEquals(0, r2.getReadLockCount());
73 <        ReentrantReadWriteLock r3 = new ReentrantReadWriteLock(false);
73 >        ReentrantReadWriteLock r3 = new ReentrantReadWriteLock(false);
74          assertFalse(r3.isFair());
75          assertFalse(r3.isWriteLocked());
76          assertEquals(0, r3.getReadLockCount());
# Line 79 | Line 80 | public class ReentrantReadWriteLockTest
80       * write-locking and read-locking an unlocked lock succeed
81       */
82      public void testLock() {
83 <        ReentrantReadWriteLock rl = new ReentrantReadWriteLock();
83 >        ReentrantReadWriteLock rl = new ReentrantReadWriteLock();
84          rl.writeLock().lock();
85          assertTrue(rl.isWriteLocked());
86          assertTrue(rl.isWriteLockedByCurrentThread());
# Line 105 | Line 106 | public class ReentrantReadWriteLockTest
106       * locking an unlocked fair lock succeeds
107       */
108      public void testFairLock() {
109 <        ReentrantReadWriteLock rl = new ReentrantReadWriteLock(true);
109 >        ReentrantReadWriteLock rl = new ReentrantReadWriteLock(true);
110          rl.writeLock().lock();
111          assertTrue(rl.isWriteLocked());
112          assertTrue(rl.isWriteLockedByCurrentThread());
# Line 130 | Line 131 | public class ReentrantReadWriteLockTest
131       * getWriteHoldCount returns number of recursive holds
132       */
133      public void testGetWriteHoldCount() {
134 <        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
135 <        for (int i = 1; i <= SIZE; i++) {
136 <            lock.writeLock().lock();
137 <            assertEquals(i,lock.getWriteHoldCount());
138 <        }
139 <        for (int i = SIZE; i > 0; i--) {
140 <            lock.writeLock().unlock();
141 <            assertEquals(i-1,lock.getWriteHoldCount());
142 <        }
134 >        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
135 >        for (int i = 1; i <= SIZE; i++) {
136 >            lock.writeLock().lock();
137 >            assertEquals(i,lock.getWriteHoldCount());
138 >        }
139 >        for (int i = SIZE; i > 0; i--) {
140 >            lock.writeLock().unlock();
141 >            assertEquals(i-1,lock.getWriteHoldCount());
142 >        }
143      }
144  
145      /**
146       * WriteLock.getHoldCount returns number of recursive holds
147       */
148      public void testGetHoldCount() {
149 <        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
150 <        for (int i = 1; i <= SIZE; i++) {
151 <            lock.writeLock().lock();
152 <            assertEquals(i,lock.writeLock().getHoldCount());
153 <        }
154 <        for (int i = SIZE; i > 0; i--) {
155 <            lock.writeLock().unlock();
156 <            assertEquals(i-1,lock.writeLock().getHoldCount());
157 <        }
149 >        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
150 >        for (int i = 1; i <= SIZE; i++) {
151 >            lock.writeLock().lock();
152 >            assertEquals(i,lock.writeLock().getHoldCount());
153 >        }
154 >        for (int i = SIZE; i > 0; i--) {
155 >            lock.writeLock().unlock();
156 >            assertEquals(i-1,lock.writeLock().getHoldCount());
157 >        }
158      }
159  
160      /**
161       * getReadHoldCount returns number of recursive holds
162       */
163      public void testGetReadHoldCount() {
164 <        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
165 <        for (int i = 1; i <= SIZE; i++) {
166 <            lock.readLock().lock();
167 <            assertEquals(i,lock.getReadHoldCount());
168 <        }
169 <        for (int i = SIZE; i > 0; i--) {
170 <            lock.readLock().unlock();
171 <            assertEquals(i-1,lock.getReadHoldCount());
172 <        }
164 >        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
165 >        for (int i = 1; i <= SIZE; i++) {
166 >            lock.readLock().lock();
167 >            assertEquals(i,lock.getReadHoldCount());
168 >        }
169 >        for (int i = SIZE; i > 0; i--) {
170 >            lock.readLock().unlock();
171 >            assertEquals(i-1,lock.getReadHoldCount());
172 >        }
173      }
174  
175  
# Line 176 | Line 177 | public class ReentrantReadWriteLockTest
177       * write-unlocking an unlocked lock throws IllegalMonitorStateException
178       */
179      public void testUnlock_IllegalMonitorStateException() {
180 <        ReentrantReadWriteLock rl = new ReentrantReadWriteLock();
181 <        try {
182 <            rl.writeLock().unlock();
183 <            shouldThrow();
184 <        } catch (IllegalMonitorStateException success) {}
180 >        ReentrantReadWriteLock rl = new ReentrantReadWriteLock();
181 >        try {
182 >            rl.writeLock().unlock();
183 >            shouldThrow();
184 >        } catch (IllegalMonitorStateException success) {}
185      }
186  
187  
# Line 188 | Line 189 | public class ReentrantReadWriteLockTest
189       * write-lockInterruptibly is interruptible
190       */
191      public void testWriteLockInterruptibly_Interrupted() throws Exception {
192 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
192 <        Thread t = new Thread(new Runnable() {
193 <                public void run() {
194 <                    try {
195 <                        lock.writeLock().lockInterruptibly();
196 <                        lock.writeLock().unlock();
197 <                        lock.writeLock().lockInterruptibly();
198 <                        lock.writeLock().unlock();
199 <                    } catch (InterruptedException success) {}
200 <                }
201 <            });
202 <
192 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
193          lock.writeLock().lock();
194 <        t.start();
194 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
195 >            public void realRun() throws InterruptedException {
196 >                lock.writeLock().lockInterruptibly();
197 >                lock.writeLock().unlock();
198 >                lock.writeLock().lockInterruptibly();
199 >                lock.writeLock().unlock();
200 >            }});
201 >
202          Thread.sleep(SHORT_DELAY_MS);
203          t.interrupt();
204          Thread.sleep(SHORT_DELAY_MS);
# Line 213 | Line 210 | public class ReentrantReadWriteLockTest
210       * timed write-tryLock is interruptible
211       */
212      public void testWriteTryLock_Interrupted() throws InterruptedException {
213 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
214 <        lock.writeLock().lock();
215 <        Thread t = new Thread(new Runnable() {
216 <                public void run() {
217 <                    try {
218 <                        lock.writeLock().tryLock(1000,TimeUnit.MILLISECONDS);
222 <                    } catch (InterruptedException success) {}
223 <                }
224 <            });
213 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
214 >        lock.writeLock().lock();
215 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
216 >            public void realRun() throws InterruptedException {
217 >                lock.writeLock().tryLock(SMALL_DELAY_MS, MILLISECONDS);
218 >            }});
219  
220 <        t.start();
220 >        Thread.sleep(SHORT_DELAY_MS);
221          t.interrupt();
222          lock.writeLock().unlock();
223          t.join();
# Line 233 | Line 227 | public class ReentrantReadWriteLockTest
227       * read-lockInterruptibly is interruptible
228       */
229      public void testReadLockInterruptibly_Interrupted() throws InterruptedException {
230 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
231 <        lock.writeLock().lock();
232 <        Thread t = new Thread(new Runnable() {
233 <                public void run() {
234 <                    try {
235 <                        lock.readLock().lockInterruptibly();
242 <                    } catch (InterruptedException success) {}
243 <                }
244 <            });
230 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
231 >        lock.writeLock().lock();
232 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
233 >            public void realRun() throws InterruptedException {
234 >                lock.readLock().lockInterruptibly();
235 >            }});
236  
246        t.start();
237          Thread.sleep(SHORT_DELAY_MS);
238          t.interrupt();
239          Thread.sleep(SHORT_DELAY_MS);
# Line 255 | Line 245 | public class ReentrantReadWriteLockTest
245       * timed read-tryLock is interruptible
246       */
247      public void testReadTryLock_Interrupted() throws InterruptedException {
248 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
249 <        lock.writeLock().lock();
250 <        Thread t = new Thread(new Runnable() {
251 <                public void run() {
252 <                    try {
253 <                        lock.readLock().tryLock(1000,TimeUnit.MILLISECONDS);
264 <                        threadShouldThrow();
265 <                    } catch (InterruptedException success) {}
266 <                }
267 <            });
248 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
249 >        lock.writeLock().lock();
250 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
251 >            public void realRun() throws InterruptedException {
252 >                lock.readLock().tryLock(LONG_DELAY_MS, MILLISECONDS);
253 >            }});
254  
255 <        t.start();
255 >        Thread.sleep(SHORT_DELAY_MS);
256          t.interrupt();
257          t.join();
258      }
# Line 276 | Line 262 | public class ReentrantReadWriteLockTest
262       * write-tryLock fails if locked
263       */
264      public void testWriteTryLockWhenLocked() throws InterruptedException {
265 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
266 <        lock.writeLock().lock();
267 <        Thread t = new Thread(new Runnable() {
268 <                public void run() {
269 <                    threadAssertFalse(lock.writeLock().tryLock());
270 <                }
285 <            });
265 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
266 >        lock.writeLock().lock();
267 >        Thread t = newStartedThread(new CheckedRunnable() {
268 >            public void realRun() {
269 >                assertFalse(lock.writeLock().tryLock());
270 >            }});
271  
287        t.start();
272          t.join();
273          lock.writeLock().unlock();
274      }
# Line 293 | Line 277 | public class ReentrantReadWriteLockTest
277       * read-tryLock fails if locked
278       */
279      public void testReadTryLockWhenLocked() throws InterruptedException {
280 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
281 <        lock.writeLock().lock();
282 <        Thread t = new Thread(new Runnable() {
283 <                public void run() {
284 <                    threadAssertFalse(lock.readLock().tryLock());
285 <                }
302 <            });
280 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
281 >        lock.writeLock().lock();
282 >        Thread t = newStartedThread(new CheckedRunnable() {
283 >            public void realRun() {
284 >                assertFalse(lock.readLock().tryLock());
285 >            }});
286  
304        t.start();
287          t.join();
288          lock.writeLock().unlock();
289      }
# Line 310 | Line 292 | public class ReentrantReadWriteLockTest
292       * Multiple threads can hold a read lock when not write-locked
293       */
294      public void testMultipleReadLocks() throws InterruptedException {
295 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
296 <        lock.readLock().lock();
297 <        Thread t = new Thread(new Runnable() {
298 <                public void run() {
299 <                    threadAssertTrue(lock.readLock().tryLock());
300 <                    lock.readLock().unlock();
301 <                }
320 <            });
295 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
296 >        lock.readLock().lock();
297 >        Thread t = newStartedThread(new CheckedRunnable() {
298 >            public void realRun() {
299 >                assertTrue(lock.readLock().tryLock());
300 >                lock.readLock().unlock();
301 >            }});
302  
322        t.start();
303          t.join();
304          lock.readLock().unlock();
305      }
# Line 328 | Line 308 | public class ReentrantReadWriteLockTest
308       * A writelock succeeds after reading threads unlock
309       */
310      public void testWriteAfterMultipleReadLocks() throws InterruptedException {
311 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
312 <        lock.readLock().lock();
313 <        Thread t1 = new Thread(new Runnable() {
314 <                public void run() {
315 <                    lock.readLock().lock();
316 <                    lock.readLock().unlock();
317 <                }
318 <            });
319 <        Thread t2 = new Thread(new Runnable() {
320 <                public void run() {
321 <                    lock.writeLock().lock();
322 <                    lock.writeLock().unlock();
343 <                }
344 <            });
311 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
312 >        lock.readLock().lock();
313 >        Thread t1 = newStartedThread(new CheckedRunnable() {
314 >            public void realRun() {
315 >                lock.readLock().lock();
316 >                lock.readLock().unlock();
317 >            }});
318 >        Thread t2 = newStartedThread(new CheckedRunnable() {
319 >            public void realRun() {
320 >                lock.writeLock().lock();
321 >                lock.writeLock().unlock();
322 >            }});
323  
346        t1.start();
347        t2.start();
324          Thread.sleep(SHORT_DELAY_MS);
325          lock.readLock().unlock();
326          t1.join(MEDIUM_DELAY_MS);
# Line 357 | Line 333 | public class ReentrantReadWriteLockTest
333       * Readlocks succeed after a writing thread unlocks
334       */
335      public void testReadAfterWriteLock() throws InterruptedException {
336 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
337 <        lock.writeLock().lock();
338 <        Thread t1 = new Thread(new Runnable() {
339 <                public void run() {
340 <                    lock.readLock().lock();
341 <                    lock.readLock().unlock();
342 <                }
343 <            });
344 <        Thread t2 = new Thread(new Runnable() {
345 <                public void run() {
346 <                    lock.readLock().lock();
347 <                    lock.readLock().unlock();
372 <                }
373 <            });
336 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
337 >        lock.writeLock().lock();
338 >        Thread t1 = newStartedThread(new CheckedRunnable() {
339 >            public void realRun() {
340 >                lock.readLock().lock();
341 >                lock.readLock().unlock();
342 >            }});
343 >        Thread t2 = newStartedThread(new CheckedRunnable() {
344 >            public void realRun() {
345 >                lock.readLock().lock();
346 >                lock.readLock().unlock();
347 >            }});
348  
375        t1.start();
376        t2.start();
349          Thread.sleep(SHORT_DELAY_MS);
350          lock.writeLock().unlock();
351          t1.join(MEDIUM_DELAY_MS);
# Line 386 | Line 358 | public class ReentrantReadWriteLockTest
358       * Read trylock succeeds if write locked by current thread
359       */
360      public void testReadHoldingWriteLock() {
361 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
362 <        lock.writeLock().lock();
361 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
362 >        lock.writeLock().lock();
363          assertTrue(lock.readLock().tryLock());
364          lock.readLock().unlock();
365          lock.writeLock().unlock();
# Line 398 | Line 370 | public class ReentrantReadWriteLockTest
370       * other threads are waiting for readlock
371       */
372      public void testReadHoldingWriteLock2() throws InterruptedException {
373 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
374 <        lock.writeLock().lock();
375 <        Thread t1 = new Thread(new Runnable() {
376 <                public void run() {
377 <                    lock.readLock().lock();
378 <                    lock.readLock().unlock();
379 <                }
380 <            });
381 <        Thread t2 = new Thread(new Runnable() {
382 <                public void run() {
383 <                    lock.readLock().lock();
384 <                    lock.readLock().unlock();
413 <                }
414 <            });
373 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
374 >        lock.writeLock().lock();
375 >        Thread t1 = newStartedThread(new CheckedRunnable() {
376 >            public void realRun() {
377 >                lock.readLock().lock();
378 >                lock.readLock().unlock();
379 >            }});
380 >        Thread t2 = newStartedThread(new CheckedRunnable() {
381 >            public void realRun() {
382 >                lock.readLock().lock();
383 >                lock.readLock().unlock();
384 >            }});
385  
416        t1.start();
417        t2.start();
386          lock.readLock().lock();
387          lock.readLock().unlock();
388          Thread.sleep(SHORT_DELAY_MS);
# Line 428 | Line 396 | public class ReentrantReadWriteLockTest
396      }
397  
398      /**
399 <     *  Read lock succeeds if write locked by current thread even if
399 >     * Read lock succeeds if write locked by current thread even if
400       * other threads are waiting for writelock
401       */
402      public void testReadHoldingWriteLock3() throws InterruptedException {
403 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
404 <        lock.writeLock().lock();
405 <        Thread t1 = new Thread(new Runnable() {
406 <                public void run() {
407 <                    lock.writeLock().lock();
408 <                    lock.writeLock().unlock();
409 <                }
410 <            });
411 <        Thread t2 = new Thread(new Runnable() {
412 <                public void run() {
413 <                    lock.writeLock().lock();
414 <                    lock.writeLock().unlock();
447 <                }
448 <            });
403 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
404 >        lock.writeLock().lock();
405 >        Thread t1 = newStartedThread(new CheckedRunnable() {
406 >            public void realRun() {
407 >                lock.writeLock().lock();
408 >                lock.writeLock().unlock();
409 >            }});
410 >        Thread t2 = newStartedThread(new CheckedRunnable() {
411 >            public void realRun() {
412 >                lock.writeLock().lock();
413 >                lock.writeLock().unlock();
414 >            }});
415  
450        t1.start();
451        t2.start();
416          lock.readLock().lock();
417          lock.readLock().unlock();
418          Thread.sleep(SHORT_DELAY_MS);
# Line 463 | Line 427 | public class ReentrantReadWriteLockTest
427  
428  
429      /**
430 <     *  Write lock succeeds if write locked by current thread even if
430 >     * Write lock succeeds if write locked by current thread even if
431       * other threads are waiting for writelock
432       */
433      public void testWriteHoldingWriteLock4() throws InterruptedException {
434 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
435 <        lock.writeLock().lock();
436 <        Thread t1 = new Thread(new Runnable() {
437 <                public void run() {
438 <                    lock.writeLock().lock();
439 <                    lock.writeLock().unlock();
440 <                }
441 <            });
442 <        Thread t2 = new Thread(new Runnable() {
443 <                public void run() {
444 <                    lock.writeLock().lock();
445 <                    lock.writeLock().unlock();
482 <                }
483 <            });
434 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
435 >        lock.writeLock().lock();
436 >        Thread t1 = newStartedThread(new CheckedRunnable() {
437 >            public void realRun() {
438 >                lock.writeLock().lock();
439 >                lock.writeLock().unlock();
440 >            }});
441 >        Thread t2 = newStartedThread(new CheckedRunnable() {
442 >            public void realRun() {
443 >                lock.writeLock().lock();
444 >                lock.writeLock().unlock();
445 >            }});
446  
485        t1.start();
486        t2.start();
447          lock.writeLock().lock();
448          lock.writeLock().unlock();
449          Thread.sleep(SHORT_DELAY_MS);
# Line 501 | Line 461 | public class ReentrantReadWriteLockTest
461       * Fair Read trylock succeeds if write locked by current thread
462       */
463      public void testReadHoldingWriteLockFair() {
464 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
465 <        lock.writeLock().lock();
464 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
465 >        lock.writeLock().lock();
466          assertTrue(lock.readLock().tryLock());
467          lock.readLock().unlock();
468          lock.writeLock().unlock();
# Line 513 | Line 473 | public class ReentrantReadWriteLockTest
473       * other threads are waiting for readlock
474       */
475      public void testReadHoldingWriteLockFair2() throws InterruptedException {
476 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
477 <        lock.writeLock().lock();
478 <        Thread t1 = new Thread(new Runnable() {
479 <                public void run() {
480 <                    lock.readLock().lock();
481 <                    lock.readLock().unlock();
482 <                }
483 <            });
484 <        Thread t2 = new Thread(new Runnable() {
485 <                public void run() {
486 <                    lock.readLock().lock();
487 <                    lock.readLock().unlock();
528 <                }
529 <            });
476 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
477 >        lock.writeLock().lock();
478 >        Thread t1 = newStartedThread(new CheckedRunnable() {
479 >            public void realRun() {
480 >                lock.readLock().lock();
481 >                lock.readLock().unlock();
482 >            }});
483 >        Thread t2 = newStartedThread(new CheckedRunnable() {
484 >            public void realRun() {
485 >                lock.readLock().lock();
486 >                lock.readLock().unlock();
487 >            }});
488  
531        t1.start();
532        t2.start();
489          lock.readLock().lock();
490          lock.readLock().unlock();
491          Thread.sleep(SHORT_DELAY_MS);
# Line 548 | Line 504 | public class ReentrantReadWriteLockTest
504       * other threads are waiting for writelock
505       */
506      public void testReadHoldingWriteLockFair3() throws InterruptedException {
507 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
508 <        lock.writeLock().lock();
509 <        Thread t1 = new Thread(new Runnable() {
510 <                public void run() {
511 <                    lock.writeLock().lock();
512 <                    lock.writeLock().unlock();
513 <                }
514 <            });
515 <        Thread t2 = new Thread(new Runnable() {
516 <                public void run() {
517 <                    lock.writeLock().lock();
518 <                    lock.writeLock().unlock();
563 <                }
564 <            });
507 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
508 >        lock.writeLock().lock();
509 >        Thread t1 = newStartedThread(new CheckedRunnable() {
510 >            public void realRun() {
511 >                lock.writeLock().lock();
512 >                lock.writeLock().unlock();
513 >            }});
514 >        Thread t2 = newStartedThread(new CheckedRunnable() {
515 >            public void realRun() {
516 >                lock.writeLock().lock();
517 >                lock.writeLock().unlock();
518 >            }});
519  
566        t1.start();
567        t2.start();
520          lock.readLock().lock();
521          lock.readLock().unlock();
522          Thread.sleep(SHORT_DELAY_MS);
# Line 583 | Line 535 | public class ReentrantReadWriteLockTest
535       * other threads are waiting for writelock
536       */
537      public void testWriteHoldingWriteLockFair4() throws InterruptedException {
538 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
539 <        lock.writeLock().lock();
540 <        Thread t1 = new Thread(new Runnable() {
541 <                public void run() {
542 <                    lock.writeLock().lock();
543 <                    lock.writeLock().unlock();
544 <                }
545 <            });
546 <        Thread t2 = new Thread(new Runnable() {
547 <                public void run() {
548 <                    lock.writeLock().lock();
549 <                    lock.writeLock().unlock();
598 <                }
599 <            });
538 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
539 >        lock.writeLock().lock();
540 >        Thread t1 = newStartedThread(new CheckedRunnable() {
541 >            public void realRun() {
542 >                lock.writeLock().lock();
543 >                lock.writeLock().unlock();
544 >            }});
545 >        Thread t2 = newStartedThread(new CheckedRunnable() {
546 >            public void realRun() {
547 >                lock.writeLock().lock();
548 >                lock.writeLock().unlock();
549 >            }});
550  
601        t1.start();
602        t2.start();
551          Thread.sleep(SHORT_DELAY_MS);
552          assertTrue(lock.isWriteLockedByCurrentThread());
553 <        assertTrue(lock.getWriteHoldCount() == 1);
553 >        assertEquals(1, lock.getWriteHoldCount());
554          lock.writeLock().lock();
555 <        assertTrue(lock.getWriteHoldCount() == 2);
555 >        assertEquals(2, lock.getWriteHoldCount());
556          lock.writeLock().unlock();
557          lock.writeLock().lock();
558          lock.writeLock().unlock();
# Line 620 | Line 568 | public class ReentrantReadWriteLockTest
568       * Read tryLock succeeds if readlocked but not writelocked
569       */
570      public void testTryLockWhenReadLocked() throws InterruptedException {
571 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
572 <        lock.readLock().lock();
573 <        Thread t = new Thread(new Runnable() {
574 <                public void run() {
575 <                    threadAssertTrue(lock.readLock().tryLock());
576 <                    lock.readLock().unlock();
577 <                }
630 <            });
571 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
572 >        lock.readLock().lock();
573 >        Thread t = newStartedThread(new CheckedRunnable() {
574 >            public void realRun() {
575 >                assertTrue(lock.readLock().tryLock());
576 >                lock.readLock().unlock();
577 >            }});
578  
632        t.start();
579          t.join();
580          lock.readLock().unlock();
581      }
582  
637
638
583      /**
584       * write tryLock fails when readlocked
585       */
586      public void testWriteTryLockWhenReadLocked() throws InterruptedException {
587 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
588 <        lock.readLock().lock();
589 <        Thread t = new Thread(new Runnable() {
590 <                public void run() {
591 <                    threadAssertFalse(lock.writeLock().tryLock());
592 <                }
649 <            });
587 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
588 >        lock.readLock().lock();
589 >        Thread t = newStartedThread(new CheckedRunnable() {
590 >            public void realRun() {
591 >                assertFalse(lock.writeLock().tryLock());
592 >            }});
593  
651        t.start();
594          t.join();
595          lock.readLock().unlock();
596      }
# Line 658 | Line 600 | public class ReentrantReadWriteLockTest
600       * Fair Read tryLock succeeds if readlocked but not writelocked
601       */
602      public void testTryLockWhenReadLockedFair() throws InterruptedException {
603 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
604 <        lock.readLock().lock();
605 <        Thread t = new Thread(new Runnable() {
606 <                public void run() {
607 <                    threadAssertTrue(lock.readLock().tryLock());
608 <                    lock.readLock().unlock();
609 <                }
668 <            });
603 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
604 >        lock.readLock().lock();
605 >        Thread t = newStartedThread(new CheckedRunnable() {
606 >            public void realRun() {
607 >                assertTrue(lock.readLock().tryLock());
608 >                lock.readLock().unlock();
609 >            }});
610  
670        t.start();
611          t.join();
612          lock.readLock().unlock();
613      }
# Line 678 | Line 618 | public class ReentrantReadWriteLockTest
618       * Fair write tryLock fails when readlocked
619       */
620      public void testWriteTryLockWhenReadLockedFair() throws InterruptedException {
621 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
622 <        lock.readLock().lock();
623 <        Thread t = new Thread(new Runnable() {
624 <                public void run() {
625 <                    threadAssertFalse(lock.writeLock().tryLock());
626 <                }
687 <            });
621 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
622 >        lock.readLock().lock();
623 >        Thread t = newStartedThread(new CheckedRunnable() {
624 >            public void realRun() {
625 >                assertFalse(lock.writeLock().tryLock());
626 >            }});
627  
689        t.start();
628          t.join();
629          lock.readLock().unlock();
630      }
# Line 697 | Line 635 | public class ReentrantReadWriteLockTest
635       * write timed tryLock times out if locked
636       */
637      public void testWriteTryLock_Timeout() throws InterruptedException {
638 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
639 <        lock.writeLock().lock();
640 <        Thread t = new Thread(new Runnable() {
641 <                public void run() {
642 <                    try {
643 <                        threadAssertFalse(lock.writeLock().tryLock(1, TimeUnit.MILLISECONDS));
706 <                    } catch (Exception ex) {
707 <                        threadUnexpectedException();
708 <                    }
709 <                }
710 <            });
638 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
639 >        lock.writeLock().lock();
640 >        Thread t = newStartedThread(new CheckedRunnable() {
641 >            public void realRun() throws InterruptedException {
642 >                assertFalse(lock.writeLock().tryLock(1, MILLISECONDS));
643 >            }});
644  
712        t.start();
645          t.join();
646 +        assertTrue(lock.writeLock().isHeldByCurrentThread());
647          lock.writeLock().unlock();
648      }
649  
# Line 718 | Line 651 | public class ReentrantReadWriteLockTest
651       * read timed tryLock times out if write-locked
652       */
653      public void testReadTryLock_Timeout() throws InterruptedException {
654 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
655 <        lock.writeLock().lock();
656 <        Thread t = new Thread(new Runnable() {
657 <                public void run() {
658 <                    try {
659 <                        threadAssertFalse(lock.readLock().tryLock(1, TimeUnit.MILLISECONDS));
727 <                    } catch (Exception ex) {
728 <                        threadUnexpectedException();
729 <                    }
730 <                }
731 <            });
654 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
655 >        lock.writeLock().lock();
656 >        Thread t = newStartedThread(new CheckedRunnable() {
657 >            public void realRun() throws InterruptedException {
658 >                assertFalse(lock.readLock().tryLock(1, MILLISECONDS));
659 >            }});
660  
733        t.start();
661          t.join();
662 +        assertTrue(lock.writeLock().isHeldByCurrentThread());
663          lock.writeLock().unlock();
664      }
665  
# Line 740 | Line 668 | public class ReentrantReadWriteLockTest
668       * write lockInterruptibly succeeds if lock free else is interruptible
669       */
670      public void testWriteLockInterruptibly() throws InterruptedException {
671 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
671 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
672          lock.writeLock().lockInterruptibly();
673 <        Thread t = new Thread(new Runnable() {
674 <                public void run() {
675 <                    try {
676 <                        lock.writeLock().lockInterruptibly();
749 <                        threadShouldThrow();
750 <                    }
751 <                    catch (InterruptedException success) {
752 <                    }
753 <                }
754 <            });
673 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
674 >            public void realRun() throws InterruptedException {
675 >                lock.writeLock().lockInterruptibly();
676 >            }});
677  
756        t.start();
678          Thread.sleep(SHORT_DELAY_MS);
679          t.interrupt();
680          Thread.sleep(SHORT_DELAY_MS);
# Line 762 | Line 683 | public class ReentrantReadWriteLockTest
683      }
684  
685      /**
686 <     *  read lockInterruptibly succeeds if lock free else is interruptible
686 >     * read lockInterruptibly succeeds if lock free else is interruptible
687       */
688      public void testReadLockInterruptibly() throws InterruptedException {
689 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
689 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
690          lock.writeLock().lockInterruptibly();
691 <        Thread t = new Thread(new Runnable() {
692 <                public void run() {
693 <                    try {
694 <                        lock.readLock().lockInterruptibly();
774 <                        threadShouldThrow();
775 <                    }
776 <                    catch (InterruptedException success) {
777 <                    }
778 <                }
779 <            });
691 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
692 >            public void realRun() throws InterruptedException {
693 >                lock.readLock().lockInterruptibly();
694 >            }});
695  
781        t.start();
696          Thread.sleep(SHORT_DELAY_MS);
697          t.interrupt();
698          t.join();
# Line 789 | Line 703 | public class ReentrantReadWriteLockTest
703       * Calling await without holding lock throws IllegalMonitorStateException
704       */
705      public void testAwait_IllegalMonitor() throws InterruptedException {
706 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
706 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
707          final Condition c = lock.writeLock().newCondition();
708          try {
709              c.await();
# Line 801 | Line 715 | public class ReentrantReadWriteLockTest
715       * Calling signal without holding lock throws IllegalMonitorStateException
716       */
717      public void testSignal_IllegalMonitor() {
718 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
718 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
719          final Condition c = lock.writeLock().newCondition();
720          try {
721              c.signal();
# Line 813 | Line 727 | public class ReentrantReadWriteLockTest
727       * awaitNanos without a signal times out
728       */
729      public void testAwaitNanos_Timeout() throws InterruptedException {
730 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
730 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
731          final Condition c = lock.writeLock().newCondition();
732  
733          lock.writeLock().lock();
# Line 824 | Line 738 | public class ReentrantReadWriteLockTest
738  
739  
740      /**
741 <     *  timed await without a signal times out
741 >     * timed await without a signal times out
742       */
743 <    public void testAwait_Timeout() {
744 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
743 >    public void testAwait_Timeout() throws InterruptedException {
744 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
745          final Condition c = lock.writeLock().newCondition();
746          lock.writeLock().lock();
747 +        assertFalse(c.await(SHORT_DELAY_MS, MILLISECONDS));
748          lock.writeLock().unlock();
749      }
750  
751      /**
752       * awaitUntil without a signal times out
753       */
754 <    public void testAwaitUntil_Timeout() {
755 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
754 >    public void testAwaitUntil_Timeout() throws InterruptedException {
755 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
756          final Condition c = lock.writeLock().newCondition();
757          lock.writeLock().lock();
758          java.util.Date d = new java.util.Date();
759 +        assertFalse(c.awaitUntil(new java.util.Date(d.getTime() + 10)));
760          lock.writeLock().unlock();
761      }
762  
# Line 848 | Line 764 | public class ReentrantReadWriteLockTest
764       * await returns when signalled
765       */
766      public void testAwait() throws InterruptedException {
767 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
767 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
768          final Condition c = lock.writeLock().newCondition();
769 <        Thread t = new Thread(new Runnable() {
770 <                public void run() {
771 <                    try {
772 <                        lock.writeLock().lock();
773 <                        c.await();
774 <                        lock.writeLock().unlock();
859 <                    }
860 <                    catch (InterruptedException e) {
861 <                        threadUnexpectedException();
862 <                    }
863 <                }
864 <            });
769 >        Thread t = newStartedThread(new CheckedRunnable() {
770 >            public void realRun() throws InterruptedException {
771 >                lock.writeLock().lock();
772 >                c.await();
773 >                lock.writeLock().unlock();
774 >            }});
775  
866        t.start();
776          Thread.sleep(SHORT_DELAY_MS);
777          lock.writeLock().lock();
778          c.signal();
# Line 931 | Line 840 | public class ReentrantReadWriteLockTest
840       * await is interruptible
841       */
842      public void testAwait_Interrupt() throws InterruptedException {
843 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
843 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
844          final Condition c = lock.writeLock().newCondition();
845 <        Thread t = new Thread(new Runnable() {
846 <                public void run() {
847 <                    try {
848 <                        lock.writeLock().lock();
849 <                        c.await();
850 <                        lock.writeLock().unlock();
942 <                        threadShouldThrow();
943 <                    }
944 <                    catch (InterruptedException success) {
945 <                    }
946 <                }
947 <            });
845 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
846 >            public void realRun() throws InterruptedException {
847 >                lock.writeLock().lock();
848 >                c.await();
849 >                lock.writeLock().unlock();
850 >            }});
851  
949        t.start();
852          Thread.sleep(SHORT_DELAY_MS);
853          t.interrupt();
854          t.join(SHORT_DELAY_MS);
# Line 957 | Line 859 | public class ReentrantReadWriteLockTest
859       * awaitNanos is interruptible
860       */
861      public void testAwaitNanos_Interrupt() throws InterruptedException {
862 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
862 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
863          final Condition c = lock.writeLock().newCondition();
864 <        Thread t = new Thread(new Runnable() {
865 <                public void run() {
866 <                    try {
867 <                        lock.writeLock().lock();
868 <                        c.awaitNanos(SHORT_DELAY_MS * 2 * 1000000);
869 <                        lock.writeLock().unlock();
968 <                        threadShouldThrow();
969 <                    }
970 <                    catch (InterruptedException success) {
971 <                    }
972 <                }
973 <            });
864 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
865 >            public void realRun() throws InterruptedException {
866 >                lock.writeLock().lock();
867 >                c.awaitNanos(MILLISECONDS.toNanos(LONG_DELAY_MS));
868 >                lock.writeLock().unlock();
869 >            }});
870  
975        t.start();
871          Thread.sleep(SHORT_DELAY_MS);
872          t.interrupt();
873          t.join(SHORT_DELAY_MS);
# Line 983 | Line 878 | public class ReentrantReadWriteLockTest
878       * awaitUntil is interruptible
879       */
880      public void testAwaitUntil_Interrupt() throws InterruptedException {
881 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
881 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
882          final Condition c = lock.writeLock().newCondition();
883 <        Thread t = new Thread(new Runnable() {
884 <                public void run() {
885 <                    try {
886 <                        lock.writeLock().lock();
887 <                        java.util.Date d = new java.util.Date();
888 <                        c.awaitUntil(new java.util.Date(d.getTime() + 10000));
889 <                        lock.writeLock().unlock();
995 <                        threadShouldThrow();
996 <                    }
997 <                    catch (InterruptedException success) {
998 <                    }
999 <                }
1000 <            });
883 >        Thread t = newStartedThread(new CheckedInterruptedRunnable() {
884 >            public void realRun() throws InterruptedException {
885 >                lock.writeLock().lock();
886 >                java.util.Date d = new java.util.Date();
887 >                c.awaitUntil(new java.util.Date(d.getTime() + 10000));
888 >                lock.writeLock().unlock();
889 >            }});
890  
1002        t.start();
891          Thread.sleep(SHORT_DELAY_MS);
892          t.interrupt();
893          t.join(SHORT_DELAY_MS);
# Line 1010 | Line 898 | public class ReentrantReadWriteLockTest
898       * signalAll wakes up all threads
899       */
900      public void testSignalAll() throws InterruptedException {
901 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
901 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
902          final Condition c = lock.writeLock().newCondition();
903 <        Thread t1 = new Thread(new Runnable() {
904 <                public void run() {
905 <                    try {
906 <                        lock.writeLock().lock();
907 <                        c.await();
908 <                        lock.writeLock().unlock();
909 <                    }
910 <                    catch (InterruptedException e) {
911 <                        threadUnexpectedException();
912 <                    }
913 <                }
914 <            });
915 <
1028 <        Thread t2 = new Thread(new Runnable() {
1029 <                public void run() {
1030 <                    try {
1031 <                        lock.writeLock().lock();
1032 <                        c.await();
1033 <                        lock.writeLock().unlock();
1034 <                    }
1035 <                    catch (InterruptedException e) {
1036 <                        threadUnexpectedException();
1037 <                    }
1038 <                }
1039 <            });
903 >        Thread t1 = newStartedThread(new CheckedRunnable() {
904 >            public void realRun() throws InterruptedException {
905 >                lock.writeLock().lock();
906 >                c.await();
907 >                lock.writeLock().unlock();
908 >            }});
909 >
910 >        Thread t2 = newStartedThread(new CheckedRunnable() {
911 >            public void realRun() throws InterruptedException {
912 >                lock.writeLock().lock();
913 >                c.await();
914 >                lock.writeLock().unlock();
915 >            }});
916  
1041        t1.start();
1042        t2.start();
917          Thread.sleep(SHORT_DELAY_MS);
918          lock.writeLock().lock();
919          c.signalAll();
# Line 1074 | Line 948 | public class ReentrantReadWriteLockTest
948       * hasQueuedThreads reports whether there are waiting threads
949       */
950      public void testhasQueuedThreads() throws InterruptedException {
951 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
951 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
952          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
953          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
954          assertFalse(lock.hasQueuedThreads());
# Line 1099 | Line 973 | public class ReentrantReadWriteLockTest
973       * hasQueuedThread(null) throws NPE
974       */
975      public void testHasQueuedThreadNPE() {
976 <        final ReentrantReadWriteLock sync = new ReentrantReadWriteLock();
976 >        final ReentrantReadWriteLock sync = new ReentrantReadWriteLock();
977          try {
978              sync.hasQueuedThread(null);
979              shouldThrow();
980 <        } catch (NullPointerException success) {
1107 <        }
980 >        } catch (NullPointerException success) {}
981      }
982  
983      /**
984       * hasQueuedThread reports whether a thread is queued.
985       */
986      public void testHasQueuedThread() throws InterruptedException {
987 <        final ReentrantReadWriteLock sync = new ReentrantReadWriteLock();
987 >        final ReentrantReadWriteLock sync = new ReentrantReadWriteLock();
988          Thread t1 = new Thread(new InterruptedLockRunnable(sync));
989          Thread t2 = new Thread(new InterruptibleLockRunnable(sync));
990          assertFalse(sync.hasQueuedThread(t1));
# Line 1142 | Line 1015 | public class ReentrantReadWriteLockTest
1015       * getQueueLength reports number of waiting threads
1016       */
1017      public void testGetQueueLength() throws InterruptedException {
1018 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1018 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1019          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
1020          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
1021          assertEquals(0, lock.getQueueLength());
# Line 1167 | Line 1040 | public class ReentrantReadWriteLockTest
1040       * getQueuedThreads includes waiting threads
1041       */
1042      public void testGetQueuedThreads() throws InterruptedException {
1043 <        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1043 >        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1044          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
1045          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
1046          assertTrue(lock.getQueuedThreads().isEmpty());
# Line 1195 | Line 1068 | public class ReentrantReadWriteLockTest
1068       * hasWaiters throws NPE if null
1069       */
1070      public void testHasWaitersNPE() {
1071 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1071 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1072          try {
1073              lock.hasWaiters(null);
1074              shouldThrow();
# Line 1206 | Line 1079 | public class ReentrantReadWriteLockTest
1079       * getWaitQueueLength throws NPE if null
1080       */
1081      public void testGetWaitQueueLengthNPE() {
1082 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1082 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1083          try {
1084              lock.getWaitQueueLength(null);
1085              shouldThrow();
# Line 1218 | Line 1091 | public class ReentrantReadWriteLockTest
1091       * getWaitingThreads throws NPE if null
1092       */
1093      public void testGetWaitingThreadsNPE() {
1094 <        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1094 >        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1095          try {
1096              lock.getWaitingThreads(null);
1097              shouldThrow();
# Line 1229 | Line 1102 | public class ReentrantReadWriteLockTest
1102       * hasWaiters throws IAE if not owned
1103       */
1104      public void testHasWaitersIAE() {
1105 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1105 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1106          final Condition c = lock.writeLock().newCondition();
1107 <        final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock();
1107 >        final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock();
1108          try {
1109              lock2.hasWaiters(c);
1110              shouldThrow();
# Line 1242 | Line 1115 | public class ReentrantReadWriteLockTest
1115       * hasWaiters throws IMSE if not locked
1116       */
1117      public void testHasWaitersIMSE() {
1118 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1118 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1119          final Condition c = lock.writeLock().newCondition();
1120          try {
1121              lock.hasWaiters(c);
# Line 1255 | Line 1128 | public class ReentrantReadWriteLockTest
1128       * getWaitQueueLength throws IAE if not owned
1129       */
1130      public void testGetWaitQueueLengthIAE() {
1131 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1131 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1132          final Condition c = lock.writeLock().newCondition();
1133 <        final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock();
1133 >        final ReentrantReadWriteLock lock2 = new ReentrantReadWriteLock();
1134          try {
1135              lock2.getWaitQueueLength(c);
1136              shouldThrow();
# Line 1268 | Line 1141 | public class ReentrantReadWriteLockTest
1141       * getWaitQueueLength throws IMSE if not locked
1142       */
1143      public void testGetWaitQueueLengthIMSE() {
1144 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1144 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1145          final Condition c = lock.writeLock().newCondition();
1146          try {
1147              lock.getWaitQueueLength(c);
# Line 1281 | Line 1154 | public class ReentrantReadWriteLockTest
1154       * getWaitingThreads throws IAE if not owned
1155       */
1156      public void testGetWaitingThreadsIAE() {
1157 <        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1157 >        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1158          final Condition c = lock.writeLock().newCondition();
1159 <        final PublicReentrantReadWriteLock lock2 = new PublicReentrantReadWriteLock();
1159 >        final PublicReentrantReadWriteLock lock2 = new PublicReentrantReadWriteLock();
1160          try {
1161              lock2.getWaitingThreads(c);
1162              shouldThrow();
# Line 1294 | Line 1167 | public class ReentrantReadWriteLockTest
1167       * getWaitingThreads throws IMSE if not locked
1168       */
1169      public void testGetWaitingThreadsIMSE() {
1170 <        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1170 >        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1171          final Condition c = lock.writeLock().newCondition();
1172          try {
1173              lock.getWaitingThreads(c);
# Line 1307 | Line 1180 | public class ReentrantReadWriteLockTest
1180       * hasWaiters returns true when a thread is waiting, else false
1181       */
1182      public void testHasWaiters() throws InterruptedException {
1183 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1183 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1184          final Condition c = lock.writeLock().newCondition();
1185 <        Thread t = new Thread(new Runnable() {
1186 <                public void run() {
1187 <                    try {
1188 <                        lock.writeLock().lock();
1189 <                        threadAssertFalse(lock.hasWaiters(c));
1190 <                        threadAssertEquals(0, lock.getWaitQueueLength(c));
1191 <                        c.await();
1192 <                        lock.writeLock().unlock();
1320 <                    }
1321 <                    catch (InterruptedException e) {
1322 <                        threadUnexpectedException();
1323 <                    }
1324 <                }
1325 <            });
1185 >        Thread t = newStartedThread(new CheckedRunnable() {
1186 >            public void realRun() throws InterruptedException {
1187 >                lock.writeLock().lock();
1188 >                assertFalse(lock.hasWaiters(c));
1189 >                assertEquals(0, lock.getWaitQueueLength(c));
1190 >                c.await();
1191 >                lock.writeLock().unlock();
1192 >            }});
1193  
1327        t.start();
1194          Thread.sleep(SHORT_DELAY_MS);
1195          lock.writeLock().lock();
1196          assertTrue(lock.hasWaiters(c));
# Line 1344 | Line 1210 | public class ReentrantReadWriteLockTest
1210       * getWaitQueueLength returns number of waiting threads
1211       */
1212      public void testGetWaitQueueLength() throws InterruptedException {
1213 <        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1213 >        final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
1214          final Condition c = lock.writeLock().newCondition();
1215 <        Thread t = new Thread(new Runnable() {
1216 <                public void run() {
1217 <                    try {
1218 <                        lock.writeLock().lock();
1219 <                        threadAssertFalse(lock.hasWaiters(c));
1220 <                        threadAssertEquals(0, lock.getWaitQueueLength(c));
1221 <                        c.await();
1222 <                        lock.writeLock().unlock();
1357 <                    }
1358 <                    catch (InterruptedException e) {
1359 <                        threadUnexpectedException();
1360 <                    }
1361 <                }
1362 <            });
1215 >        Thread t = newStartedThread(new CheckedRunnable() {
1216 >            public void realRun() throws InterruptedException {
1217 >                lock.writeLock().lock();
1218 >                assertFalse(lock.hasWaiters(c));
1219 >                assertEquals(0, lock.getWaitQueueLength(c));
1220 >                c.await();
1221 >                lock.writeLock().unlock();
1222 >            }});
1223  
1364        t.start();
1224          Thread.sleep(SHORT_DELAY_MS);
1225          lock.writeLock().lock();
1226          assertTrue(lock.hasWaiters(c));
# Line 1382 | Line 1241 | public class ReentrantReadWriteLockTest
1241       * getWaitingThreads returns only and all waiting threads
1242       */
1243      public void testGetWaitingThreads() throws InterruptedException {
1244 <        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1244 >        final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock();
1245          final Condition c = lock.writeLock().newCondition();
1246 <        Thread t1 = new Thread(new Runnable() {
1247 <                public void run() {
1248 <                    try {
1249 <                        lock.writeLock().lock();
1250 <                        threadAssertTrue(lock.getWaitingThreads(c).isEmpty());
1251 <                        c.await();
1252 <                        lock.writeLock().unlock();
1253 <                    }
1254 <                    catch (InterruptedException e) {
1255 <                        threadUnexpectedException();
1256 <                    }
1257 <                }
1258 <            });
1259 <
1260 <        Thread t2 = new Thread(new Runnable() {
1402 <                public void run() {
1403 <                    try {
1404 <                        lock.writeLock().lock();
1405 <                        threadAssertFalse(lock.getWaitingThreads(c).isEmpty());
1406 <                        c.await();
1407 <                        lock.writeLock().unlock();
1408 <                    }
1409 <                    catch (InterruptedException e) {
1410 <                        threadUnexpectedException();
1411 <                    }
1412 <                }
1413 <            });
1246 >        Thread t1 = new Thread(new CheckedRunnable() {
1247 >            public void realRun() throws InterruptedException {
1248 >                lock.writeLock().lock();
1249 >                assertTrue(lock.getWaitingThreads(c).isEmpty());
1250 >                c.await();
1251 >                lock.writeLock().unlock();
1252 >            }});
1253 >
1254 >        Thread t2 = new Thread(new CheckedRunnable() {
1255 >            public void realRun() throws InterruptedException {
1256 >                lock.writeLock().lock();
1257 >                assertFalse(lock.getWaitingThreads(c).isEmpty());
1258 >                c.await();
1259 >                lock.writeLock().unlock();
1260 >            }});
1261  
1262          lock.writeLock().lock();
1263          assertTrue(lock.getWaitingThreads(c).isEmpty());

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines