Added isRunning() to RunQueue, made BasicRunQueue work both in separate-thread

mode and in just-call-run()-yourself mode.


git-svn-id: https://samskivert.googlecode.com/svn/trunk@2473 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
samskivert
2008-11-08 00:05:57 +00:00
parent f2ff2491f5
commit 24f1fb611a
3 changed files with 38 additions and 15 deletions
@@ -45,19 +45,26 @@ public class BasicRunQueue extends LoopingThread
_queue = new Queue<Runnable>(); _queue = new Queue<Runnable>();
} }
// documentation inherited from interface // from interface RunQueue
public void postRunnable (Runnable r) public void postRunnable (Runnable r)
{ {
_queue.append(r); _queue.append(r);
} }
// documentation inherited from interface // from interface RunQueue
public boolean isDispatchThread () public boolean isDispatchThread ()
{ {
return Thread.currentThread() == this; return Thread.currentThread() == _dispatcher;
} }
@Override @Override // from LoopingThread
protected void willStart ()
{
super.willStart();
_dispatcher = Thread.currentThread();
}
@Override // from LoopingThread
protected void iterate () protected void iterate ()
{ {
Runnable r = _queue.get(); Runnable r = _queue.get();
@@ -69,7 +76,7 @@ public class BasicRunQueue extends LoopingThread
} }
} }
@Override @Override // from LoopingThread
protected void kick () protected void kick ()
{ {
postRunnable(new Runnable() { postRunnable(new Runnable() {
@@ -81,4 +88,8 @@ public class BasicRunQueue extends LoopingThread
/** The queue of things to run. */ /** The queue of things to run. */
protected Queue<Runnable> _queue; protected Queue<Runnable> _queue;
/** Our dispatcher thread (may == this or may be something else if we're being used directly
* rather than in separate thread mode). */
protected Thread _dispatcher;
} }
+17 -10
View File
@@ -29,22 +29,29 @@ public interface RunQueue
{ {
/** A useful RunQueue that uses the AWT dispatch thread. */ /** A useful RunQueue that uses the AWT dispatch thread. */
public static final RunQueue AWT = new RunQueue() { public static final RunQueue AWT = new RunQueue() {
public void postRunnable (Runnable r) { public void postRunnable (Runnable r) {
EventQueue.invokeLater(r); EventQueue.invokeLater(r);
} }
public boolean isDispatchThread () {
public boolean isDispatchThread () { return EventQueue.isDispatchThread();
return EventQueue.isDispatchThread(); }
} public boolean isRunning () {
}; return true;
}
};
/** /**
* Post the specified Runnable to be run on the RunQueue. * Post the specified Runnable to be run on the RunQueue.
*/ */
public void postRunnable (Runnable r); void postRunnable (Runnable r);
/** /**
* @return true if the calling thread is the RunQueue dispatch thread. * @return true if the calling thread is the RunQueue dispatch thread.
*/ */
public boolean isDispatchThread (); boolean isDispatchThread ();
/**
* @return true if this run queue is still processing runnables, false if it has been shutdown.
*/
boolean isRunning ();
} }
@@ -98,6 +98,11 @@ public class SerialExecutorTest extends TestCase
return Thread.currentThread() == _main; return Thread.currentThread() == _main;
} }
public boolean isRunning ()
{
return true;
}
public static Test suite () public static Test suite ()
{ {
return new SerialExecutorTest(); return new SerialExecutorTest();