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();
+    }
+  }
+
+}