294 |
|
* @param e the comparison value for checking match |
295 |
|
* @param mode mode |
296 |
|
* @param nanos timeout value |
297 |
< |
* @return matched item, or s if cancelled |
297 |
> |
* @return matched item, or null if cancelled |
298 |
|
*/ |
299 |
|
private E awaitFulfill(Node<E> pred, Node<E> s, E e, |
300 |
|
int mode, long nanos) { |
360 |
|
for (;;) { |
361 |
|
Node<E> h = head.get(); |
362 |
|
Node<E> first = h.next; |
363 |
< |
if (first != null && first.next == first) { // help advance |
363 |
> |
if (first != null && first.get() == first) { // help advance |
364 |
|
advanceHead(h, first); |
365 |
|
continue; |
366 |
|
} |
511 |
|
|
512 |
|
/** |
513 |
|
* Inserts the specified element at the tail of this queue. |
514 |
< |
* As the queue is unbounded this method will never throw |
514 |
> |
* As the queue is unbounded, this method will never throw |
515 |
|
* {@link IllegalStateException} or return {@code false}. |
516 |
|
* |
517 |
|
* @return {@code true} (as specified by {@link Collection#add}) |
524 |
|
/** |
525 |
|
* Transfers the specified element immediately if there exists a |
526 |
|
* consumer already waiting to receive it (in {@link #take} or |
527 |
< |
* timed {@link #poll(Object,long,TimeUnit) poll}), otherwise |
527 |
> |
* timed {@link #poll(long,TimeUnit) poll}), otherwise |
528 |
|
* returning {@code false} without enqueuing the element. |
529 |
|
* |
530 |
|
* @throws NullPointerException if the specified element is null |
539 |
|
* waiting if necessary for the element to be received by a |
540 |
|
* consumer invoking {@code take} or {@code poll}. |
541 |
|
* |
542 |
– |
* @throws InterruptedException {@inheritDoc} |
542 |
|
* @throws NullPointerException if the specified element is null |
543 |
|
*/ |
544 |
|
public void transfer(E e) throws InterruptedException { |
551 |
|
|
552 |
|
/** |
553 |
|
* Inserts the specified element at the tail of this queue, |
554 |
< |
* waiting up to the specified wait time for the element to be |
555 |
< |
* received by a consumer invoking {@code take} or {@code poll}. |
554 |
> |
* waiting up to the specified wait time if necessary for the |
555 |
> |
* element to be received by a consumer invoking {@code take} or |
556 |
> |
* {@code poll}. |
557 |
|
* |
558 |
– |
* @throws InterruptedException {@inheritDoc} |
558 |
|
* @throws NullPointerException if the specified element is null |
559 |
|
*/ |
560 |
|
public boolean tryTransfer(E e, long timeout, TimeUnit unit) |
575 |
|
throw new InterruptedException(); |
576 |
|
} |
577 |
|
|
579 |
– |
/** |
580 |
– |
* @throws InterruptedException {@inheritDoc} |
581 |
– |
*/ |
578 |
|
public E poll(long timeout, TimeUnit unit) throws InterruptedException { |
579 |
|
E e = xfer(null, TIMEOUT, unit.toNanos(timeout)); |
580 |
|
if (e != null || !Thread.interrupted()) |