Mercurial > hg > blitz_condensed
diff src/EDU/oswego/cs/dl/util/concurrent/LockedExecutor.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/EDU/oswego/cs/dl/util/concurrent/LockedExecutor.java Sat Mar 21 11:00:06 2009 +0000 @@ -0,0 +1,57 @@ +/* + File: LockedExecutor.java + + Originally written by Doug Lea and released into the public domain. + This may be used for any purposes whatsoever without acknowledgment. + Thanks for the assistance and support of Sun Microsystems Labs, + and everyone contributing, testing, and using this code. + + History: + Date Who What + 21Jun1998 dl Create public version +*/ + +package EDU.oswego.cs.dl.util.concurrent; + +/** + * An implementation of Executor that + * invokes the run method of the supplied command within + * a synchronization lock and then returns. + * + * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] + **/ +public class LockedExecutor implements Executor { + + /** The mutex **/ + protected final Sync mutex_; + + /** + * Create a new LockedExecutor that relies on the given mutual + * exclusion lock. + * @param mutex Any mutual exclusion lock. + * Standard usage is to supply an instance of <code>Mutex</code>, + * but, for example, a Semaphore initialized to 1 also works. + * On the other hand, many other Sync implementations would not + * work here, so some care is required to supply a sensible + * synchronization object. + **/ + + public LockedExecutor(Sync mutex) { + mutex_ = mutex; + } + + /** + * Execute the given command directly in the current thread, + * within the supplied lock. + **/ + public void execute(Runnable command) throws InterruptedException { + mutex_.acquire(); + try { + command.run(); + } + finally { + mutex_.release(); + } + } + +}