|
|||||||||
| Home >> All >> org >> ematgine >> utils >> [ concurrent overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
org.ematgine.utils.concurrent
Class LinkedQueue

java.lang.Objectorg.ematgine.utils.concurrent.LinkedQueue
- public class LinkedQueue
- extends java.lang.Object
- implements Channel
- extends java.lang.Object
A linked list based channel implementation. The algorithm avoids contention between puts and takes when the queue is not empty. Normally a put and a take can proceed simultaneously. (Although it does not allow multiple concurrent puts or takes.) This class tends to perform more efficently than other Channel implementations in producer/consumer applications.
[ Introduction to this package. ]
| Field Summary | |
protected LinkedNode |
head_
Dummy header node of list. |
protected LinkedNode |
last_
The last node of list. |
protected java.lang.Object |
putLock_
Helper monitor for managing access to last node. |
protected int |
waitingForTake_
The number of threads waiting for a take. |
| Constructor Summary | |
LinkedQueue()
|
|
| Method Summary | |
protected java.lang.Object |
extract()
Main mechanics for take/poll |
protected void |
insert(java.lang.Object x)
Main mechanics for put/offer |
boolean |
isEmpty()
|
boolean |
offer(java.lang.Object x,
long msecs)
Place item in channel only if it can be accepted within msecs milliseconds. |
java.lang.Object |
peek()
Return, but do not remove object at head of Channel, or null if it is empty. |
java.lang.Object |
poll(long msecs)
Return and remove an item from channel only if one is available within msecs milliseconds. |
void |
put(java.lang.Object x)
Place item in the channel, possibly waiting indefinitely until it can be accepted. |
java.lang.Object |
take()
Return and remove an item from channel, possibly waiting indefinitely until such an item exists. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
head_
protected LinkedNode head_
- Dummy header node of list. The first actual node, if it exists, is always
at head_.next. After each take, the old first node becomes the head.
putLock_
protected final java.lang.Object putLock_
- Helper monitor for managing access to last node.
last_
protected LinkedNode last_
- The last node of list. Put() appends to list, so modifies last_
waitingForTake_
protected int waitingForTake_
- The number of threads waiting for a take.
Notifications are provided in put only if greater than zero.
The bookkeeping is worth it here since in reasonably balanced
usages, the notifications will hardly ever be necessary, so
the call overhead to notify can be eliminated.
| Constructor Detail |
LinkedQueue
public LinkedQueue()
| Method Detail |
insert
protected void insert(java.lang.Object x)
- Main mechanics for put/offer
extract
protected java.lang.Object extract()
- Main mechanics for take/poll
put
public void put(java.lang.Object x) throws java.lang.InterruptedException
- Description copied from interface:
Channel - Place item in the channel, possibly waiting indefinitely until
it can be accepted. Channels implementing the BoundedChannel
subinterface are generally guaranteed to block on puts upon
reaching capacity, but other implementations may or may not block.
offer
public boolean offer(java.lang.Object x, long msecs) throws java.lang.InterruptedException
- Description copied from interface:
Channel - Place item in channel only if it can be accepted within
msecs milliseconds. The time bound is interpreted in
a coarse-grained, best-effort fashion.
take
public java.lang.Object take() throws java.lang.InterruptedException
- Description copied from interface:
Channel - Return and remove an item from channel,
possibly waiting indefinitely until
such an item exists.
peek
public java.lang.Object peek()
- Description copied from interface:
Channel - Return, but do not remove object at head of Channel,
or null if it is empty.
isEmpty
public boolean isEmpty()
poll
public java.lang.Object poll(long msecs) throws java.lang.InterruptedException
- Description copied from interface:
Channel - Return and remove an item from channel only if one is available within
msecs milliseconds. The time bound is interpreted in a coarse
grained, best-effort fashion.
|
|||||||||
| Home >> All >> org >> ematgine >> utils >> [ concurrent overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC
org.ematgine.utils.concurrent.LinkedQueue