380 |
|
} |
381 |
|
} |
382 |
|
|
383 |
+ |
/** |
384 |
+ |
* drainPermits reports and removes given number of permits |
385 |
+ |
*/ |
386 |
+ |
public void testDrainPermits() { |
387 |
+ |
Semaphore s = new Semaphore(0, false); |
388 |
+ |
assertEquals(0, s.availablePermits()); |
389 |
+ |
assertEquals(0, s.drainPermits()); |
390 |
+ |
s.release(10); |
391 |
+ |
assertEquals(10, s.availablePermits()); |
392 |
+ |
assertEquals(10, s.drainPermits()); |
393 |
+ |
assertEquals(0, s.availablePermits()); |
394 |
+ |
assertEquals(0, s.drainPermits()); |
395 |
+ |
} |
396 |
|
|
397 |
|
/** |
398 |
|
* reducePermits reduces number of permits |
619 |
|
public void run() { |
620 |
|
try { |
621 |
|
s.acquire(); |
622 |
< |
s.release(); |
610 |
< |
s.release(); |
622 |
> |
s.release(2); |
623 |
|
s.acquire(); |
624 |
|
} catch(InterruptedException ie){ |
625 |
|
threadUnexpectedException(); |
629 |
|
try { |
630 |
|
t.start(); |
631 |
|
Thread.sleep(SHORT_DELAY_MS); |
632 |
< |
s.release(); |
633 |
< |
s.release(); |
634 |
< |
s.acquire(); |
623 |
< |
s.acquire(); |
624 |
< |
s.release(); |
632 |
> |
s.release(2); |
633 |
> |
s.acquire(2); |
634 |
> |
s.release(1); |
635 |
|
t.join(); |
636 |
|
} catch( InterruptedException e){ |
637 |
|
unexpectedException(); |