ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/intro.html
(Generate patch)

Comparing jsr166/src/main/intro.html (file contents):
Revision 1.2 by dl, Wed Jun 4 11:33:01 2003 UTC vs.
Revision 1.6 by dl, Thu Jun 26 10:46:55 2003 UTC

# Line 16 | Line 16 | To join a mailing list discussing this J
16   <p>
17   <em>
18   Disclaimer - This prototype is experimental code developed as part of
19 < JSR166 and made available to the developer community for use
19 > JCP JSR166 and made available to the developer community for use
20   as-is. It is not a supported product. Use it at your own risk. The
21   specification, language and implementation are subject to change as a
22   result of your feedback. Because these features have not yet been
# Line 24 | Line 24 | To join a mailing list discussing this J
24   their inclusion in a product.
25   </em>
26  
27 < <p>
28 < Package java.util.concurrent contains utility classes that are
29 < commonly useful in concurrent programming. Like package java.util, it
30 < includes a few small standardized extensible frameworks, as well as
31 < some classes that provide useful functionality and are otherwise
32 < tedious or difficult to implement.  In this JSR, we have been
33 < conservative in selecting only those APIs and implementations that are
34 < useful enough to encourage nearly all concurrent programmers to use
35 < routinely.  JSR 166 also includes a few changes and additions in
36 < packages outside of java.util.concurrent: java.lang, to address
37 < uncaught exceptions, and java.util to better integrate queues.
38 < The API covers:
39 <
40 <  <ul>
41 <    <li> Queues
42 <    <li> Executors
43 <    <li> Locks
44 <    <li> Condition variables
45 <    <li> Atomic variables
46 <    <li> Timing
47 <    <li> Synchronizers
48 <    <li> Concurrent Collections
49 <    <li> Uncaught Exception Handlers
50 <  </ul>
51 <
52 <
53 < The main rationale for JSR 166 is that threading primitives, such as
54 < synchronized blocks, Object.wait and Object.notify, are insufficient
55 < for many programming tasks.  Currently, developers can use only the
56 < concurrency control constructs provided in the Java language
57 < itself. These are too low level for some applications, and are
58 < incomplete for others.  As a result, application programmers are often
59 < forced to implement their own concurrency facilities, resulting in
60 < enormous duplication of effort creating facilities that are
61 < notoriously hard to get right and even harder to optimize.  Offering a
62 < standard set of concurrency utilities will ease the task of writing a
63 < wide variety of multithreaded applications and generally improve the
64 < quality of the applications that use them.
27 > <p> Package java.util.concurrent contains utility classes commonly
28 > useful in concurrent programming. Like package java.util, it includes
29 > a few small standardized extensible frameworks, as well as some
30 > classes that provide useful functionality and are otherwise tedious or
31 > difficult to implement.  JSR166 also includes a few changes and
32 > additions in packages outside of java.util.concurrent: java.lang, to
33 > address uncaught exceptions, and java.util to better integrate with
34 > collections.  Since the target release is JDK1.5, many APIs use
35 > generics to parameterize on types.  Here are brief descriptions of the
36 > main components.
37  
38 < <p>
67 < Here are brief descriptions and rationales of the main components.
68 < For details see the javadocs at <a
69 < href="http://gee.cs.oswego.edu/dl/concurrent/index.html">http://gee.cs.oswego.edu/dl/concurrent/index.html</a>
38 > <h2>Executors</h2>
39  
40 + {@link java.util.concurrent.Executor} is a simple standardized
41 + interface for defining custom thread-like subsystems, including thread
42 + pools, asynch-IO, and lightweight task frameworks.  Depending on which
43 + concrete Executor class is being used, tasks may execute in a newly
44 + created thread, an existing task-execution thread, or the thread
45 + calling <tt>execute()</tt>, and may execute sequentially or
46 + concurrently.  Executors also standardize ways of calling threads that
47 + compute functions returning results, via a {@link
48 + java.util.concurrent.Future}. This is supported in part by defining
49 + interface {@link java.util.concurrent.Callable}, the argument/result
50 + analog of Runnable.
51 +
52 + <p> {@link java.util.concurrent.ExecutorService} provides a more
53 + complete framework for executing Runnables.  An ExecutorService
54 + manages queueing and scheduling of tasks, and allows controlled
55 + shutdown.  The two primary implementations of ExecutorService are
56 + {@link java.util.concurrent.ThreadPoolExecutor}, a highly tunable and
57 + flexible thread pool and {@link
58 + java.util.concurrent.ScheduledExecutor}, which adds support for
59 + delayed and periodic task execution.  These, and other Executors can
60 + be used in conjunction with a {@link java.util.concurrent.FutureTask}
61 + to asynchronously
62 + start a potentially long-running computation and query the FutureTask
63 + to determine if its execution has completed, or cancel it.
64 +
65 + <p> The {@link java.util.concurrent.Executors} class provides factory
66 + methods for the most common kinds and styles of Executors, as well as
67 + a few utilities methods for using them.
68  
69   <h2>Queues</h2>
70  
71 < A basic (nonblocking) Queue interface that is compatatible with
72 < java.util.Collections will be introduced into java.util. Also,
73 < although it is at the borders of being in scope of JSR-166,
74 < java.util.LinkedList will be adapted to support Queue, and
75 < a new non-thread-safe java.util.PriorityQueue will be added.
71 > A basic (nonblocking) {@link java.util.Queue} interface extending
72 > java.util.Collection is introduced into java.util. Existing class
73 > java.util.LinkedList is adapted to support Queue, and a new
74 > non-thread-safe {@link java.util.PriorityQueue} is added.  The
75 > java.util.concurrent {@link
76 > java.util.concurrent.ConcurrentLinkedQueue} class supplies an
77 > efficient sclable thread-safe non-blocking FIFO queue, and {@link
78 > java.util.concurrent.ConcurrentLinkedStack} provides a similar
79 > non-blocking LIFO stack.
80  
81   <p> Five implementations in java.util.concurrent support the extended
82 < BlockingQueue interface, that defines blocking versions of put and
83 < take: LinkedBlockingQueue, ArrayBlockingQueue, SynchronousQueue,
84 < PriorityBlockingQueue, and DelayQueue. Additionally,
85 < java.util.concurrent.LinkedQueue supplies an efficient thread-safe
86 < non-blocking queue.
87 <
88 < <p> Since the target release is JDK1.5, and generics are slated to be
88 < in 1.5, Queues are parametrized on element type. (Also some others
89 < below.)
90 <
91 <
92 < <h2>Executors</h2>
93 <
94 < Executors provide a simple standardized interface for defining custom
95 < thread-like subsystems, including thread pools, asynch-IO, and
96 < lightweight task frameworks.  Executors also standardize ways of
97 < calling threads that compute functions returning results, via
98 < Futures. This is supported in part by defining interface Callable, the
99 < argument/result analog of Runnable.
100 <
101 < <p> Executors provide a framework for executing Runnables.  The
102 < Executor manages queueing and scheduling of tasks, and creation and
103 < teardown of threads.  Depending on which concrete Executor class is
104 < being used, tasks may execute in a newly created thread, an existing
105 < task-execution thread, or the thread calling execute(), and may
106 < execute sequentially or concurrently.
107 <
108 < <p> Several concrete implementations of Executor are included in
109 < java.util.concurrent, including ThreadPoolExecutor, a flexible thread
110 < pool and ScheduledExecutor, which adds support for delayed and
111 < periodic task execution.  Executor can be used in conjunction with
112 < FutureTask (which implements Runnable) to asynchronously start a
113 < potentially long-running computation and query the FutureTask to
114 < determine if its execution has completed.
115 <
116 < <p> The <tt>Executors</tt> class provides factory methods for all
117 < of the types of executors provided in
118 < <tt>java.util.concurrent</tt>.
82 > {@link java.util.concurrent.BlockingQueue} interface, that defines
83 > blocking versions of put and take: {@link
84 > java.util.concurrent.LinkedBlockingQueue}, {@link
85 > java.util.concurrent.ArrayBlockingQueue}, {@link
86 > java.util.concurrent.SynchronousQueue}, {@link
87 > java.util.concurrent.PriorityBlockingQueue}, and
88 > {@link java.util.concurrent.DelayQueue}.
89  
90  
91   <h2>Locks</h2>
92  
93 < The Lock interface supports locking disciplines that differ in
94 < semantics (reentrant, fair, etc), and that can be used in
95 < non-block-structured contexts including hand-over-hand and lock
96 < reordering algorithms. This flexibility comes at the price of more
97 < awkward syntax.  Implementations include ReentrantLock and
98 < FairReentrantLock.
99 <
100 < <p>
101 < The Locks class additionally supports trylock-designs using builtin
102 < locks without needing to use Lock classes.  This requires adding new
103 < capabilities to builtin locks inside JVMs.
104 <
105 < <p>
106 < A ReadWriteLock interface similarly defines locks that may be shared
107 < among readers but are exclusive to writers. For this release, only a
138 < single implementation, ReentrantReadWriteLock, is planned, since it
93 > The {@link java.util.concurrent.Lock} interface supports locking
94 > disciplines that differ in semantics (reentrant, fair, etc), and that
95 > can be used in non-block-structured contexts including hand-over-hand
96 > and lock reordering algorithms. This flexibility comes at the price of
97 > more awkward syntax.  Implementations include {@link
98 > java.util.concurrent.ReentrantLock} and {@link
99 > java.util.concurrent.FairReentrantLock}.
100 >
101 > <p> The {@link java.util.concurrent.Locks} class additionally supports
102 > some common trylock-designs using builtin locks.
103 >
104 > <p> The {@link java.util.concurrent.ReadWriteLock} interface similarly
105 > defines locks that may be shared among readers but are exclusive to
106 > writers.  Only a single implementation, {@link
107 > java.util.concurrent.ReentrantReadWriteLock}, is provided, since it
108   covers all standard usage contexts. But programmers may create their
109   own implementations to cover nonstandard requirements.
110  
111   <h2>Conditions</h2>
112  
113 < A Condition class provides the kinds of condition variables associated
114 < with monitors in other cocurrent languages, as well as pthreads
115 < condvars.  Their support reduces the need for tricky and/or
116 < inefficient solutions to many classic concurrent problems.  Conditions
117 < also address the annoying problem that Object.wait(msecs) does not
118 < return an indication of whether the wait timed out. This leads to
150 < error-prone code. Since this method is in class Object, the problem is
151 < basically unfixable.
152 < <p>
153 < To avoid compatibility problems, the names of Condition methods need
154 < to be different than Object versions. The downside of this is that
155 < people can make the mistake of calling cond.notify instead of
156 < cond.signal. However, they will get IllegalMonitorState exceptions if
157 < they do, so they can detect the error if they ever run the code.
158 <
113 > The {@link java.util.concurrent.Condition} interface describes the
114 > kinds of condition variables associated with monitors in other
115 > concurrent languages, as well as pthreads-style condvars.  Their
116 > support reduces the need for tricky and/or inefficient solutions to
117 > many classic concurrent problems.  To avoid compatibility problems,
118 > the names of Condition methods are different than Object versions.
119  
120 < <h2>Atomic variables</h2>
120 > <h2>Atomics</h2>
121  
122   The atomic subpackage includes a small library of classes, including
123 < AtomicInteger, AtomicLong, and AtomicReference that support variables
124 < performinf compareAndSet (CAS) and related atomic operations.
123 > AtomicInteger, AtomicLong, and AtomicReference that support
124 > compareAndSet (CAS) and related atomic operations.
125  
126   <h2>Timing</h2>
127  
128 < Java has always supported sub-millisecond versions of several native
129 < time-out-based methods (such as Object.wait), but not methods to
130 < actually perform timing in finer-grained units. We address this by
171 < introducing class TimeUnit, which provides multiple granularities for
172 < both accessing time and performing time-out based operations.
173 <
128 > The {@link java.util.concurrent.TimeUnit} class provides multiple
129 > granularities (including nanoseconds) for both accessing time and
130 > performing time-out based operations.
131  
132   <h2>Synchronizers</h2>
133  
134   Five classes aid common special-purpose synchronization idioms.
135 < Semaphores and FairSemaphores are classic concurrency tools.
136 < CountDownLatches are very simple yet very common objects useful for
137 < blocking until a single signal, event, or condition holds.
138 < CyclicBarriers are resettable multiway synchronization points very
139 < common in some styles of parallel programming. Exchangers allow two
135 > {@link java.util.concurrent.Semaphore} and {@link
136 > java.util.concurrent.FairSemaphore} are classic concurrency tools.
137 > {@link java.util.concurrent.CountDownLatch} is very simple yet very
138 > common utility for blocking until a single signal, event, or condition
139 > holds.  A {@link java.util.concurrent.CyclicBarrier} is a resettable multiway
140 > synchronization point common in some styles of parallel
141 > programming. An {@link java.util.concurrent.Exchanger} allows two
142   threads to exchange objects at a rendezvous point.
143  
185
144   <h2>Concurrent Collections</h2>
145  
146 < JSR 166 will supply a few Collection implementations designed for use
147 < in multithreaded contexts: ConcurrentHashMap, CopyOnWriteArrayList,
148 < and CopyOnWriteArraySet.
146 > Besides Queues, this package supplies a few Collection implementations
147 > designed for use in multithreaded contexts: {@link
148 > java.util.concurrent.ConcurrentHashMap}, {@link
149 > java.util.concurrent.CopyOnWriteArrayList}, and {@link
150 > java.util.concurrent.CopyOnWriteArraySet}.
151 >
152 > <p>The "Concurrent" prefix for classes is a shorthand
153 > indicating several differences from similar "synchronized"
154 > classes. For example <tt>java.util.Hashtable</tt> and
155 > <tt>Collections.synchronizedMap(new HashMap())</tt> are
156 > synchronized. But {@link
157 > java.util.concurrent.ConcurrentHashMap} is "concurrent".
158 > A concurrent collection (among other kinds of classes) is
159 > thread-safe, but not governed by a single exclusion lock. So, in the
160 > particular case of ConcurrentHashMap, it safely permits any number of
161 > concurrent reads as well as a tunable number of concurrent writes.
162 > There may still be a role for "synchronized" classes in some
163 > multithreaded programs -- they can sometimes be useful when you need
164 > to prevent ALL access to a collection via a single lock, at the
165 > expense of much poor scalability. In all other cases, "concurrent"
166 > versions are normally preferable.
167 >
168 > <p> Most concurrent Collection implementations (including most Queues)
169 > also differ from the usual java.util conventions in that their Iterators
170 > provide <em>weakly consistent</em> rather than fast-fail traversal. A
171 > weakly consistent iterator is thread-safe, but does not necessarily
172 > freeze the collection while iterating, so it may (or may not) reflect
173 > any updates since the iterator was created.
174  
175   <h2>Uncaught Exception Handlers</h2>
176  
177 < The java.lang.Thread class will be modified to allow per-thread
177 > The java.lang.Thread class is modified to allow per-thread
178   installation of handlers for uncaught exceptions. Ths optionally
179   disassociates these handlers from ThreadGroups, which has proven to be
180 < too inflexible in many multithreaded programs. (Note that the combination
181 < of features in JSR 166 make ThreadGroups even less likely to
182 < be used in most programs. Perhaps they will eventually be deprecated.)
180 > too inflexible in many multithreaded programs. (Note that the
181 > combination of features in JSR166 make ThreadGroups even less likely
182 > to be used in most programs. Perhaps they will eventually be
183 > deprecated.)
184  
185 < <p> Additionally, ThreadLocals will now support a means to remove a
186 < ThreadLocal, which is needed in some thread-pool and worker-thread
185 > <p> Additionally, java.lang.ThreadLocal now supports a means to remove
186 > a ThreadLocal, which is needed in some thread-pool and worker-thread
187   designs.
188  
189    <hr>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines