Mercurial > hg > blitz_condensed
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3dc0c5604566 |
---|---|
1 /* | |
2 File: Slot.java | |
3 | |
4 Originally written by Doug Lea and released into the public domain. | |
5 This may be used for any purposes whatsoever without acknowledgment. | |
6 Thanks for the assistance and support of Sun Microsystems Labs, | |
7 and everyone contributing, testing, and using this code. | |
8 | |
9 History: | |
10 Date Who What | |
11 11Jun1998 dl Create public version | |
12 25aug1998 dl added peek | |
13 */ | |
14 | |
15 package EDU.oswego.cs.dl.util.concurrent; | |
16 import java.lang.reflect.*; | |
17 | |
18 /** | |
19 * A one-slot buffer, using semaphores to control access. | |
20 * Slots are usually more efficient and controllable than using other | |
21 * bounded buffers implementations with capacity of 1. | |
22 * <p> | |
23 * Among other applications, Slots can be convenient in token-passing | |
24 * designs: Here. the Slot holds a some object serving as a token, | |
25 * that can be obtained | |
26 * and returned by various threads. | |
27 * | |
28 * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] | |
29 **/ | |
30 | |
31 public class Slot extends SemaphoreControlledChannel { | |
32 | |
33 /** | |
34 * Create a buffer with the given capacity, using | |
35 * the supplied Semaphore class for semaphores. | |
36 * @exception NoSuchMethodException If class does not have constructor | |
37 * that intializes permits | |
38 * @exception SecurityException if constructor information | |
39 * not accessible | |
40 * @exception InstantiationException if semaphore class is abstract | |
41 * @exception IllegalAccessException if constructor cannot be called | |
42 * @exception InvocationTargetException if semaphore constructor throws an | |
43 * exception | |
44 **/ | |
45 | |
46 public Slot(Class semaphoreClass) | |
47 throws NoSuchMethodException, | |
48 SecurityException, | |
49 InstantiationException, | |
50 IllegalAccessException, | |
51 InvocationTargetException { | |
52 super(1, semaphoreClass); | |
53 } | |
54 | |
55 /** | |
56 * Create a new Slot using default Semaphore implementations | |
57 **/ | |
58 public Slot() { | |
59 super(1); | |
60 } | |
61 | |
62 /** The slot **/ | |
63 protected Object item_ = null; | |
64 | |
65 | |
66 /** Set the item in preparation for a take **/ | |
67 protected synchronized void insert(Object x) { | |
68 item_ = x; | |
69 } | |
70 | |
71 /** Take item known to exist **/ | |
72 protected synchronized Object extract() { | |
73 Object x = item_; | |
74 item_ = null; | |
75 return x; | |
76 } | |
77 | |
78 public synchronized Object peek() { | |
79 return item_; | |
80 } | |
81 | |
82 } |