|
From: <me...@us...> - 2002-10-05 17:53:07
|
Update of /cvsroot/cayenne/cayenne/src/cayenne/java/org/objectstyle/cayenne/util
In directory usw-pr-cvs1:/tmp/cvs-serv27594/src/cayenne/java/org/objectstyle/cayenne/util
Modified Files:
RequestDequeue.java RequestQueue.java
Log Message:
added test suite for multithreaded RequestQueue
Index: RequestDequeue.java
===================================================================
RCS file: /cvsroot/cayenne/cayenne/src/cayenne/java/org/objectstyle/cayenne/util/RequestDequeue.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- RequestDequeue.java 4 Oct 2002 06:10:45 -0000 1.1
+++ RequestDequeue.java 5 Oct 2002 17:53:04 -0000 1.2
@@ -64,7 +64,8 @@
public class RequestDequeue {
public static final int DEQUEUE_SUCCESS = 1;
public static final int QUEUE_FULL = 2;
- public static final int WAIT_TIMED_OUT = 3;
+ public static final int TIMED_OUT = 3;
+ public static final int INTERRUPTED = 4;
protected Object dequeueEventObject;
protected int dequeueEventCode;
@@ -110,6 +111,24 @@
}
public boolean isTimedOut() {
- return WAIT_TIMED_OUT == dequeueEventCode;
+ return TIMED_OUT == dequeueEventCode;
+ }
+
+ public boolean isInterrupted() {
+ return INTERRUPTED == dequeueEventCode;
+ }
+
+ public String toString() {
+ StringBuffer buf = new StringBuffer();
+ buf.append('[').append(getClass().getName()).append(": ");
+ if (isDequeueSuccess()) {
+ buf.append("success");
+ } else if (isQueueFull()) {
+ buf.append("queue full");
+ } else if (isTimedOut()) {
+ buf.append("timeout or interrupted");
+ }
+ buf.append(']');
+ return buf.toString();
}
}
Index: RequestQueue.java
===================================================================
RCS file: /cvsroot/cayenne/cayenne/src/cayenne/java/org/objectstyle/cayenne/util/RequestQueue.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- RequestQueue.java 5 Oct 2002 16:30:10 -0000 1.2
+++ RequestQueue.java 5 Oct 2002 17:53:04 -0000 1.3
@@ -81,8 +81,9 @@
/**
* Constructor for RequestQueue.
*
- * @param maxSize - maximum allowed number of
- * threads in the queue.
+ * @param maxSize - maximum allowed number of threads in the queue.
+ * @param timeout - timeout in milliseconds that determines maximum possible
+ * wait time in the queue.
*/
public RequestQueue(int maxSize, int timeout) {
this.maxSize = maxSize;
@@ -90,6 +91,12 @@
this.queue = Collections.synchronizedList(new ArrayList());
}
+ public int getSize() {
+ synchronized (queue) {
+ return queue.size();
+ }
+ }
+
/**
* Queues current thread. This will block
* the caller till the thread is dequeued as a result
@@ -114,19 +121,22 @@
// wait
synchronized (result) {
+ boolean interrupted = false;
try {
// release lock and wait
result.wait(timeout);
- } catch (InterruptedException e) {}
+ } catch (InterruptedException e) {
+ interrupted = true;
+ }
// wait is over, remove itself from the queue
-
if (result.getDequeueEventCode() != RequestDequeue.DEQUEUE_SUCCESS) {
- // timeout
+ // timeout or interrupted
synchronized (queue) {
queue.remove(result);
- result.setDequeueEventCode(RequestDequeue.WAIT_TIMED_OUT);
+ int code = (interrupted) ? RequestDequeue.INTERRUPTED : RequestDequeue.TIMED_OUT;
+ result.setDequeueEventCode(code);
}
}
@@ -148,9 +158,8 @@
first.notifyAll();
}
return true;
- }
- else {
- return false;
+ } else {
+ return false;
}
}
}
|