71 |
|
awaitTermination(t, MEDIUM_DELAY_MS); |
72 |
|
} |
73 |
|
|
74 |
+ |
/** |
75 |
+ |
* take blocks interruptibly when empty |
76 |
+ |
*/ |
77 |
+ |
public void testTakeFromEmptyBlocksInterruptibly() |
78 |
+ |
throws InterruptedException { |
79 |
+ |
final BlockingQueue q = emptyCollection(); |
80 |
+ |
final CountDownLatch threadStarted = new CountDownLatch(1); |
81 |
+ |
Thread t = newStartedThread(new CheckedRunnable() { |
82 |
+ |
public void realRun() { |
83 |
+ |
long t0 = System.nanoTime(); |
84 |
+ |
threadStarted.countDown(); |
85 |
+ |
try { |
86 |
+ |
q.take(); |
87 |
+ |
shouldThrow(); |
88 |
+ |
} catch (InterruptedException success) {} |
89 |
+ |
assertTrue(millisElapsedSince(t0) >= SHORT_DELAY_MS); |
90 |
+ |
}}); |
91 |
+ |
threadStarted.await(); |
92 |
+ |
Thread.sleep(SHORT_DELAY_MS); |
93 |
+ |
assertTrue(t.isAlive()); |
94 |
+ |
t.interrupt(); |
95 |
+ |
awaitTermination(t, MEDIUM_DELAY_MS); |
96 |
+ |
assertFalse(t.isAlive()); |
97 |
+ |
} |
98 |
+ |
|
99 |
|
/** For debugging. */ |
100 |
|
public void XXXXtestFails() { |
101 |
|
fail(emptyCollection().getClass().toString()); |