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

Comparing jsr166/src/test/tck/ReentrantLockTest.java (file contents):
Revision 1.29 by jsr166, Tue Nov 17 13:31:53 2009 UTC vs.
Revision 1.31 by jsr166, Sat Nov 21 02:33:20 2009 UTC

# 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.util.*;
14   import java.io.*;
15  
16   public class ReentrantLockTest 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(ReentrantLockTest.class);
21 >        return new TestSuite(ReentrantLockTest.class);
22      }
23  
24      /**
# Line 72 | Line 73 | public class ReentrantLockTest extends J
73       * locking an unlocked lock succeeds
74       */
75      public void testLock() {
76 <        ReentrantLock rl = new ReentrantLock();
76 >        ReentrantLock rl = new ReentrantLock();
77          rl.lock();
78          assertTrue(rl.isLocked());
79          rl.unlock();
# Line 83 | Line 84 | public class ReentrantLockTest extends J
84       * locking an unlocked fair lock succeeds
85       */
86      public void testFairLock() {
87 <        ReentrantLock rl = new ReentrantLock(true);
87 >        ReentrantLock rl = new ReentrantLock(true);
88          rl.lock();
89          assertTrue(rl.isLocked());
90          rl.unlock();
# Line 93 | Line 94 | public class ReentrantLockTest extends J
94       * Unlocking an unlocked lock throws IllegalMonitorStateException
95       */
96      public void testUnlock_IllegalMonitorStateException() {
97 <        ReentrantLock rl = new ReentrantLock();
98 <        try {
99 <            rl.unlock();
100 <            shouldThrow();
101 <        } catch (IllegalMonitorStateException success) {}
97 >        ReentrantLock rl = new ReentrantLock();
98 >        try {
99 >            rl.unlock();
100 >            shouldThrow();
101 >        } catch (IllegalMonitorStateException success) {}
102      }
103  
104      /**
105       * tryLock on an unlocked lock succeeds
106       */
107      public void testTryLock() {
108 <        ReentrantLock rl = new ReentrantLock();
108 >        ReentrantLock rl = new ReentrantLock();
109          assertTrue(rl.tryLock());
110          assertTrue(rl.isLocked());
111          rl.unlock();
# Line 115 | Line 116 | public class ReentrantLockTest extends J
116       * hasQueuedThreads reports whether there are waiting threads
117       */
118      public void testhasQueuedThreads() throws InterruptedException {
119 <        final ReentrantLock lock = new ReentrantLock();
119 >        final ReentrantLock lock = new ReentrantLock();
120          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
121          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
122          assertFalse(lock.hasQueuedThreads());
# Line 140 | Line 141 | public class ReentrantLockTest extends J
141       * getQueueLength reports number of waiting threads
142       */
143      public void testGetQueueLength() throws InterruptedException {
144 <        final ReentrantLock lock = new ReentrantLock();
144 >        final ReentrantLock lock = new ReentrantLock();
145          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
146          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
147          assertEquals(0, lock.getQueueLength());
# Line 165 | Line 166 | public class ReentrantLockTest extends J
166       * getQueueLength reports number of waiting threads
167       */
168      public void testGetQueueLength_fair() throws InterruptedException {
169 <        final ReentrantLock lock = new ReentrantLock(true);
169 >        final ReentrantLock lock = new ReentrantLock(true);
170          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
171          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
172          assertEquals(0, lock.getQueueLength());
# Line 190 | Line 191 | public class ReentrantLockTest extends J
191       * hasQueuedThread(null) throws NPE
192       */
193      public void testHasQueuedThreadNPE() {
194 <        final ReentrantLock sync = new ReentrantLock();
194 >        final ReentrantLock sync = new ReentrantLock();
195          try {
196              sync.hasQueuedThread(null);
197              shouldThrow();
# Line 201 | Line 202 | public class ReentrantLockTest extends J
202       * hasQueuedThread reports whether a thread is queued.
203       */
204      public void testHasQueuedThread() throws InterruptedException {
205 <        final ReentrantLock sync = new ReentrantLock();
205 >        final ReentrantLock sync = new ReentrantLock();
206          Thread t1 = new Thread(new InterruptedLockRunnable(sync));
207          Thread t2 = new Thread(new InterruptibleLockRunnable(sync));
208          assertFalse(sync.hasQueuedThread(t1));
# Line 232 | Line 233 | public class ReentrantLockTest extends J
233       * getQueuedThreads includes waiting threads
234       */
235      public void testGetQueuedThreads() throws InterruptedException {
236 <        final PublicReentrantLock lock = new PublicReentrantLock();
236 >        final PublicReentrantLock lock = new PublicReentrantLock();
237          Thread t1 = new Thread(new InterruptedLockRunnable(lock));
238          Thread t2 = new Thread(new InterruptibleLockRunnable(lock));
239          assertTrue(lock.getQueuedThreads().isEmpty());
# Line 261 | Line 262 | public class ReentrantLockTest extends J
262       * timed tryLock is interruptible.
263       */
264      public void testInterruptedException2() throws InterruptedException {
265 <        final ReentrantLock lock = new ReentrantLock();
266 <        lock.lock();
267 <        Thread t = new Thread(new CheckedInterruptedRunnable() {
265 >        final ReentrantLock lock = new ReentrantLock();
266 >        lock.lock();
267 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
268              public void realRun() throws InterruptedException {
269 <                lock.tryLock(MEDIUM_DELAY_MS,TimeUnit.MILLISECONDS);
269 >                lock.tryLock(MEDIUM_DELAY_MS,MILLISECONDS);
270              }});
271  
272          t.start();
# Line 278 | Line 279 | public class ReentrantLockTest extends J
279       * TryLock on a locked lock fails
280       */
281      public void testTryLockWhenLocked() throws InterruptedException {
282 <        final ReentrantLock lock = new ReentrantLock();
283 <        lock.lock();
284 <        Thread t = new Thread(new CheckedRunnable() {
282 >        final ReentrantLock lock = new ReentrantLock();
283 >        lock.lock();
284 >        Thread t = new Thread(new CheckedRunnable() {
285              public void realRun() {
286                  threadAssertFalse(lock.tryLock());
287              }});
# Line 294 | Line 295 | public class ReentrantLockTest extends J
295       * Timed tryLock on a locked lock times out
296       */
297      public void testTryLock_Timeout() throws InterruptedException {
298 <        final ReentrantLock lock = new ReentrantLock();
299 <        lock.lock();
300 <        Thread t = new Thread(new CheckedRunnable() {
298 >        final ReentrantLock lock = new ReentrantLock();
299 >        lock.lock();
300 >        Thread t = new Thread(new CheckedRunnable() {
301              public void realRun() throws InterruptedException {
302 <                threadAssertFalse(lock.tryLock(1, TimeUnit.MILLISECONDS));
302 >                threadAssertFalse(lock.tryLock(1, MILLISECONDS));
303              }});
304  
305          t.start();
# Line 310 | Line 311 | public class ReentrantLockTest extends J
311       * getHoldCount returns number of recursive holds
312       */
313      public void testGetHoldCount() {
314 <        ReentrantLock lock = new ReentrantLock();
315 <        for (int i = 1; i <= SIZE; i++) {
316 <            lock.lock();
317 <            assertEquals(i, lock.getHoldCount());
318 <        }
319 <        for (int i = SIZE; i > 0; i--) {
320 <            lock.unlock();
321 <            assertEquals(i-1, lock.getHoldCount());
322 <        }
314 >        ReentrantLock lock = new ReentrantLock();
315 >        for (int i = 1; i <= SIZE; i++) {
316 >            lock.lock();
317 >            assertEquals(i, lock.getHoldCount());
318 >        }
319 >        for (int i = SIZE; i > 0; i--) {
320 >            lock.unlock();
321 >            assertEquals(i-1, lock.getHoldCount());
322 >        }
323      }
324  
325  
# Line 326 | Line 327 | public class ReentrantLockTest extends J
327       * isLocked is true when locked and false when not
328       */
329      public void testIsLocked() throws InterruptedException {
330 <        final ReentrantLock lock = new ReentrantLock();
331 <        lock.lock();
332 <        assertTrue(lock.isLocked());
333 <        lock.unlock();
334 <        assertFalse(lock.isLocked());
335 <        Thread t = new Thread(new CheckedRunnable() {
330 >        final ReentrantLock lock = new ReentrantLock();
331 >        lock.lock();
332 >        assertTrue(lock.isLocked());
333 >        lock.unlock();
334 >        assertFalse(lock.isLocked());
335 >        Thread t = new Thread(new CheckedRunnable() {
336              public void realRun() throws InterruptedException {
337                  lock.lock();
338                  Thread.sleep(SMALL_DELAY_MS);
# Line 350 | Line 351 | public class ReentrantLockTest extends J
351       * lockInterruptibly is interruptible.
352       */
353      public void testLockInterruptibly1() throws InterruptedException {
354 <        final ReentrantLock lock = new ReentrantLock();
355 <        lock.lock();
356 <        Thread t = new Thread(new InterruptedLockRunnable(lock));
354 >        final ReentrantLock lock = new ReentrantLock();
355 >        lock.lock();
356 >        Thread t = new Thread(new InterruptedLockRunnable(lock));
357          t.start();
358          Thread.sleep(SHORT_DELAY_MS);
359          t.interrupt();
# Line 365 | Line 366 | public class ReentrantLockTest extends J
366       * lockInterruptibly succeeds when unlocked, else is interruptible
367       */
368      public void testLockInterruptibly2() throws InterruptedException {
369 <        final ReentrantLock lock = new ReentrantLock();
369 >        final ReentrantLock lock = new ReentrantLock();
370          lock.lockInterruptibly();
371 <        Thread t = new Thread(new InterruptedLockRunnable(lock));
371 >        Thread t = new Thread(new InterruptedLockRunnable(lock));
372          t.start();
373          t.interrupt();
374          assertTrue(lock.isLocked());
# Line 379 | Line 380 | public class ReentrantLockTest extends J
380       * Calling await without holding lock throws IllegalMonitorStateException
381       */
382      public void testAwait_IllegalMonitor() throws InterruptedException {
383 <        final ReentrantLock lock = new ReentrantLock();
383 >        final ReentrantLock lock = new ReentrantLock();
384          final Condition c = lock.newCondition();
385          try {
386              c.await();
# Line 391 | Line 392 | public class ReentrantLockTest extends J
392       * Calling signal without holding lock throws IllegalMonitorStateException
393       */
394      public void testSignal_IllegalMonitor() {
395 <        final ReentrantLock lock = new ReentrantLock();
395 >        final ReentrantLock lock = new ReentrantLock();
396          final Condition c = lock.newCondition();
397          try {
398              c.signal();
# Line 403 | Line 404 | public class ReentrantLockTest extends J
404       * awaitNanos without a signal times out
405       */
406      public void testAwaitNanos_Timeout() throws InterruptedException {
407 <        final ReentrantLock lock = new ReentrantLock();
407 >        final ReentrantLock lock = new ReentrantLock();
408          final Condition c = lock.newCondition();
409          lock.lock();
410          long t = c.awaitNanos(100);
# Line 415 | Line 416 | public class ReentrantLockTest extends J
416       *  timed await without a signal times out
417       */
418      public void testAwait_Timeout() throws InterruptedException {
419 <        final ReentrantLock lock = new ReentrantLock();
419 >        final ReentrantLock lock = new ReentrantLock();
420          final Condition c = lock.newCondition();
421          lock.lock();
422 <        assertFalse(c.await(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
422 >        assertFalse(c.await(SHORT_DELAY_MS, MILLISECONDS));
423          lock.unlock();
424      }
425  
# Line 426 | Line 427 | public class ReentrantLockTest extends J
427       * awaitUntil without a signal times out
428       */
429      public void testAwaitUntil_Timeout() throws InterruptedException {
430 <        final ReentrantLock lock = new ReentrantLock();
430 >        final ReentrantLock lock = new ReentrantLock();
431          final Condition c = lock.newCondition();
432          lock.lock();
433          java.util.Date d = new java.util.Date();
# Line 438 | Line 439 | public class ReentrantLockTest extends J
439       * await returns when signalled
440       */
441      public void testAwait() throws InterruptedException {
442 <        final ReentrantLock lock = new ReentrantLock();
442 >        final ReentrantLock lock = new ReentrantLock();
443          final Condition c = lock.newCondition();
444 <        Thread t = new Thread(new CheckedRunnable() {
444 >        Thread t = new Thread(new CheckedRunnable() {
445              public void realRun() throws InterruptedException {
446                  lock.lock();
447                  c.await();
# Line 460 | Line 461 | public class ReentrantLockTest extends J
461       * hasWaiters throws NPE if null
462       */
463      public void testHasWaitersNPE() {
464 <        final ReentrantLock lock = new ReentrantLock();
464 >        final ReentrantLock lock = new ReentrantLock();
465          try {
466              lock.hasWaiters(null);
467              shouldThrow();
# Line 471 | Line 472 | public class ReentrantLockTest extends J
472       * getWaitQueueLength throws NPE if null
473       */
474      public void testGetWaitQueueLengthNPE() {
475 <        final ReentrantLock lock = new ReentrantLock();
475 >        final ReentrantLock lock = new ReentrantLock();
476          try {
477              lock.getWaitQueueLength(null);
478              shouldThrow();
# Line 483 | Line 484 | public class ReentrantLockTest extends J
484       * getWaitingThreads throws NPE if null
485       */
486      public void testGetWaitingThreadsNPE() {
487 <        final PublicReentrantLock lock = new PublicReentrantLock();
487 >        final PublicReentrantLock lock = new PublicReentrantLock();
488          try {
489              lock.getWaitingThreads(null);
490              shouldThrow();
# Line 495 | Line 496 | public class ReentrantLockTest extends J
496       * hasWaiters throws IAE if not owned
497       */
498      public void testHasWaitersIAE() {
499 <        final ReentrantLock lock = new ReentrantLock();
499 >        final ReentrantLock lock = new ReentrantLock();
500          final Condition c = lock.newCondition();
501 <        final ReentrantLock lock2 = new ReentrantLock();
501 >        final ReentrantLock lock2 = new ReentrantLock();
502          try {
503              lock2.hasWaiters(c);
504              shouldThrow();
# Line 508 | Line 509 | public class ReentrantLockTest extends J
509       * hasWaiters throws IMSE if not locked
510       */
511      public void testHasWaitersIMSE() {
512 <        final ReentrantLock lock = new ReentrantLock();
512 >        final ReentrantLock lock = new ReentrantLock();
513          final Condition c = lock.newCondition();
514          try {
515              lock.hasWaiters(c);
# Line 521 | Line 522 | public class ReentrantLockTest extends J
522       * getWaitQueueLength throws IAE if not owned
523       */
524      public void testGetWaitQueueLengthIAE() {
525 <        final ReentrantLock lock = new ReentrantLock();
525 >        final ReentrantLock lock = new ReentrantLock();
526          final Condition c = lock.newCondition();
527 <        final ReentrantLock lock2 = new ReentrantLock();
527 >        final ReentrantLock lock2 = new ReentrantLock();
528          try {
529              lock2.getWaitQueueLength(c);
530              shouldThrow();
# Line 534 | Line 535 | public class ReentrantLockTest extends J
535       * getWaitQueueLength throws IMSE if not locked
536       */
537      public void testGetWaitQueueLengthIMSE() {
538 <        final ReentrantLock lock = new ReentrantLock();
538 >        final ReentrantLock lock = new ReentrantLock();
539          final Condition c = lock.newCondition();
540          try {
541              lock.getWaitQueueLength(c);
# Line 547 | Line 548 | public class ReentrantLockTest extends J
548       * getWaitingThreads throws IAE if not owned
549       */
550      public void testGetWaitingThreadsIAE() {
551 <        final PublicReentrantLock lock = new PublicReentrantLock();
551 >        final PublicReentrantLock lock = new PublicReentrantLock();
552          final Condition c = lock.newCondition();
553 <        final PublicReentrantLock lock2 = new PublicReentrantLock();
553 >        final PublicReentrantLock lock2 = new PublicReentrantLock();
554          try {
555              lock2.getWaitingThreads(c);
556              shouldThrow();
# Line 560 | Line 561 | public class ReentrantLockTest extends J
561       * getWaitingThreads throws IMSE if not locked
562       */
563      public void testGetWaitingThreadsIMSE() {
564 <        final PublicReentrantLock lock = new PublicReentrantLock();
564 >        final PublicReentrantLock lock = new PublicReentrantLock();
565          final Condition c = lock.newCondition();
566          try {
567              lock.getWaitingThreads(c);
# Line 573 | Line 574 | public class ReentrantLockTest extends J
574       * hasWaiters returns true when a thread is waiting, else false
575       */
576      public void testHasWaiters() throws InterruptedException {
577 <        final ReentrantLock lock = new ReentrantLock();
577 >        final ReentrantLock lock = new ReentrantLock();
578          final Condition c = lock.newCondition();
579 <        Thread t = new Thread(new CheckedRunnable() {
579 >        Thread t = new Thread(new CheckedRunnable() {
580              public void realRun() throws InterruptedException {
581                  lock.lock();
582                  threadAssertFalse(lock.hasWaiters(c));
# Line 604 | Line 605 | public class ReentrantLockTest extends J
605       * getWaitQueueLength returns number of waiting threads
606       */
607      public void testGetWaitQueueLength() throws InterruptedException {
608 <        final ReentrantLock lock = new ReentrantLock();
608 >        final ReentrantLock lock = new ReentrantLock();
609          final Condition c = lock.newCondition();
610 <        Thread t1 = new Thread(new CheckedRunnable() {
610 >        Thread t1 = new Thread(new CheckedRunnable() {
611              public void realRun() throws InterruptedException {
612                  lock.lock();
613                  threadAssertFalse(lock.hasWaiters(c));
# Line 615 | Line 616 | public class ReentrantLockTest extends J
616                  lock.unlock();
617              }});
618  
619 <        Thread t2 = new Thread(new CheckedRunnable() {
619 >        Thread t2 = new Thread(new CheckedRunnable() {
620              public void realRun() throws InterruptedException {
621                  lock.lock();
622                  threadAssertTrue(lock.hasWaiters(c));
# Line 648 | Line 649 | public class ReentrantLockTest extends J
649       * getWaitingThreads returns only and all waiting threads
650       */
651      public void testGetWaitingThreads() throws InterruptedException {
652 <        final PublicReentrantLock lock = new PublicReentrantLock();
652 >        final PublicReentrantLock lock = new PublicReentrantLock();
653          final Condition c = lock.newCondition();
654 <        Thread t1 = new Thread(new CheckedRunnable() {
654 >        Thread t1 = new Thread(new CheckedRunnable() {
655              public void realRun() throws InterruptedException {
656                  lock.lock();
657                  threadAssertTrue(lock.getWaitingThreads(c).isEmpty());
# Line 658 | Line 659 | public class ReentrantLockTest extends J
659                  lock.unlock();
660              }});
661  
662 <        Thread t2 = new Thread(new CheckedRunnable() {
662 >        Thread t2 = new Thread(new CheckedRunnable() {
663              public void realRun() throws InterruptedException {
664                  lock.lock();
665                  threadAssertFalse(lock.getWaitingThreads(c).isEmpty());
# Line 749 | Line 750 | public class ReentrantLockTest extends J
750       * await is interruptible
751       */
752      public void testAwait_Interrupt() throws InterruptedException {
753 <        final ReentrantLock lock = new ReentrantLock();
753 >        final ReentrantLock lock = new ReentrantLock();
754          final Condition c = lock.newCondition();
755 <        Thread t = new Thread(new CheckedInterruptedRunnable() {
756 <            public void realRun() throws InterruptedException {
755 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
756 >            public void realRun() throws InterruptedException {
757                  lock.lock();
758                  c.await();
759              }});
# Line 768 | Line 769 | public class ReentrantLockTest extends J
769       * awaitNanos is interruptible
770       */
771      public void testAwaitNanos_Interrupt() throws InterruptedException {
772 <        final ReentrantLock lock = new ReentrantLock();
772 >        final ReentrantLock lock = new ReentrantLock();
773          final Condition c = lock.newCondition();
774 <        Thread t = new Thread(new CheckedInterruptedRunnable() {
775 <            public void realRun() throws InterruptedException {
774 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
775 >            public void realRun() throws InterruptedException {
776                  lock.lock();
777                  c.awaitNanos(1000 * 1000 * 1000); // 1 sec
778              }});
# Line 787 | Line 788 | public class ReentrantLockTest extends J
788       * awaitUntil is interruptible
789       */
790      public void testAwaitUntil_Interrupt() throws InterruptedException {
791 <        final ReentrantLock lock = new ReentrantLock();
791 >        final ReentrantLock lock = new ReentrantLock();
792          final Condition c = lock.newCondition();
793 <        Thread t = new Thread(new CheckedInterruptedRunnable() {
794 <            public void realRun() throws InterruptedException {
793 >        Thread t = new Thread(new CheckedInterruptedRunnable() {
794 >            public void realRun() throws InterruptedException {
795                  lock.lock();
796                  java.util.Date d = new java.util.Date();
797                  c.awaitUntil(new java.util.Date(d.getTime() + 10000));
# Line 807 | Line 808 | public class ReentrantLockTest extends J
808       * signalAll wakes up all threads
809       */
810      public void testSignalAll() throws InterruptedException {
811 <        final ReentrantLock lock = new ReentrantLock();
811 >        final ReentrantLock lock = new ReentrantLock();
812          final Condition c = lock.newCondition();
813 <        Thread t1 = new Thread(new CheckedRunnable() {
813 >        Thread t1 = new Thread(new CheckedRunnable() {
814              public void realRun() throws InterruptedException {
815                  lock.lock();
816                  c.await();
817                  lock.unlock();
818              }});
819  
820 <        Thread t2 = new Thread(new CheckedRunnable() {
820 >        Thread t2 = new Thread(new CheckedRunnable() {
821              public void realRun() throws InterruptedException {
822                  lock.lock();
823                  c.await();
# Line 839 | Line 840 | public class ReentrantLockTest extends J
840       * await after multiple reentrant locking preserves lock count
841       */
842      public void testAwaitLockCount() throws InterruptedException {
843 <        final ReentrantLock lock = new ReentrantLock();
843 >        final ReentrantLock lock = new ReentrantLock();
844          final Condition c = lock.newCondition();
845 <        Thread t1 = new Thread(new CheckedRunnable() {
845 >        Thread t1 = new Thread(new CheckedRunnable() {
846              public void realRun() throws InterruptedException {
847                  lock.lock();
848                  threadAssertEquals(1, lock.getHoldCount());
# Line 850 | Line 851 | public class ReentrantLockTest extends J
851                  lock.unlock();
852              }});
853  
854 <        Thread t2 = new Thread(new CheckedRunnable() {
854 >        Thread t2 = new Thread(new CheckedRunnable() {
855              public void realRun() throws InterruptedException {
856                  lock.lock();
857                  lock.lock();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines