diff src/EDU/oswego/cs/dl/util/concurrent/Slot.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/Slot.java	Sat Mar 21 11:00:06 2009 +0000
@@ -0,0 +1,82 @@
+/*
+  File: Slot.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
+  11Jun1998  dl               Create public version
+  25aug1998  dl               added peek
+*/
+
+package EDU.oswego.cs.dl.util.concurrent;
+import java.lang.reflect.*;
+
+/**
+ * A one-slot buffer, using semaphores to control access.
+ * Slots are usually more efficient and controllable than using other
+ * bounded buffers implementations with capacity of 1.
+ * <p>
+ * Among other applications, Slots can be convenient in token-passing
+ * designs: Here. the Slot holds a some object serving as a token,
+ * that can be obtained
+ * and returned by various threads.
+ *
+ * <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 Slot extends SemaphoreControlledChannel {
+
+  /**
+   * Create a buffer with the given capacity, using
+   * the supplied Semaphore class for semaphores.
+   * @exception NoSuchMethodException If class does not have constructor 
+   * that intializes permits
+   * @exception SecurityException if constructor information 
+   * not accessible
+   * @exception InstantiationException if semaphore class is abstract
+   * @exception IllegalAccessException if constructor cannot be called
+   * @exception InvocationTargetException if semaphore constructor throws an
+   * exception
+   **/
+
+  public Slot(Class semaphoreClass) 
+   throws NoSuchMethodException, 
+          SecurityException, 
+          InstantiationException, 
+          IllegalAccessException, 
+          InvocationTargetException {
+    super(1, semaphoreClass);
+  }
+
+  /** 
+   * Create a new Slot using default Semaphore implementations 
+   **/
+  public Slot() {
+    super(1);
+  }
+
+  /** The slot **/
+  protected Object item_ = null;
+
+
+  /** Set the item in preparation for a take **/
+  protected synchronized void insert(Object x) { 
+    item_ = x; 
+  }
+
+  /** Take item known to exist **/
+  protected synchronized Object extract() { 
+    Object x = item_;
+    item_ = null;
+    return x;
+  }
+
+  public synchronized Object peek() {
+    return item_;
+  }
+
+}