481 |
|
/* |
482 |
|
* Possible values for "how" argument in xfer method. |
483 |
|
*/ |
484 |
< |
private static final int NOW = 0; // for untimed poll, tryTransfer |
485 |
< |
private static final int ASYNC = 1; // for offer, put, add |
486 |
< |
private static final int SYNC = 2; // for transfer, take |
487 |
< |
private static final int TIMEOUT = 3; // for timed poll, tryTransfer |
484 |
> |
private static final int NOW = 0; // for untimed poll, tryTransfer |
485 |
> |
private static final int ASYNC = 1; // for offer, put, add |
486 |
> |
private static final int SYNC = 2; // for transfer, take |
487 |
> |
private static final int TIMED = 3; // for timed poll, tryTransfer |
488 |
|
|
489 |
|
@SuppressWarnings("unchecked") |
490 |
|
static <E> E cast(Object item) { |
497 |
|
* |
498 |
|
* @param e the item or null for take |
499 |
|
* @param haveData true if this is a put, else a take |
500 |
< |
* @param how NOW, ASYNC, SYNC, or TIMEOUT |
501 |
< |
* @param nanos timeout in nanosecs, used only if mode is TIMEOUT |
500 |
> |
* @param how NOW, ASYNC, SYNC, or TIMED |
501 |
> |
* @param nanos timeout in nanosecs, used only if mode is TIMED |
502 |
|
* @return an item if matched, else e |
503 |
|
* @throws NullPointerException if haveData mode but e is null |
504 |
|
*/ |
543 |
|
if (pred == null) |
544 |
|
continue retry; // lost race vs opposite mode |
545 |
|
if (how != ASYNC) |
546 |
< |
return awaitMatch(s, pred, e, (how == TIMEOUT), nanos); |
546 |
> |
return awaitMatch(s, pred, e, (how == TIMED), nanos); |
547 |
|
} |
548 |
|
return e; // not waiting |
549 |
|
} |
593 |
|
* in any current calls but may in possible future extensions) |
594 |
|
* @param e the comparison value for checking match |
595 |
|
* @param timed if true, wait only until timeout elapses |
596 |
< |
* @param nanos timeout value |
596 |
> |
* @param nanos timeout in nanosecs, used only if timed is true |
597 |
|
* @return matched item, or e if unmatched on interrupt or timeout |
598 |
|
*/ |
599 |
|
private E awaitMatch(Node s, Node pred, E e, boolean timed, long nanos) { |
1041 |
|
*/ |
1042 |
|
public boolean tryTransfer(E e, long timeout, TimeUnit unit) |
1043 |
|
throws InterruptedException { |
1044 |
< |
if (xfer(e, true, TIMEOUT, unit.toNanos(timeout)) == null) |
1044 |
> |
if (xfer(e, true, TIMED, unit.toNanos(timeout)) == null) |
1045 |
|
return true; |
1046 |
|
if (!Thread.interrupted()) |
1047 |
|
return false; |
1057 |
|
} |
1058 |
|
|
1059 |
|
public E poll(long timeout, TimeUnit unit) throws InterruptedException { |
1060 |
< |
E e = xfer(null, false, TIMEOUT, unit.toNanos(timeout)); |
1060 |
> |
E e = xfer(null, false, TIMED, unit.toNanos(timeout)); |
1061 |
|
if (e != null || !Thread.interrupted()) |
1062 |
|
return e; |
1063 |
|
throw new InterruptedException(); |