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.1 by tim, Fri May 16 14:13:04 2003 UTC vs.
Revision 1.4 by dl, Tue Jun 24 14:33:52 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 FutureTask} to asynchronously
61 + start a potentially long-running computation and query the FutureTask
62 + to determine if its execution has completed, or cancel it.
63 +
64 + <p> The {@link java.util.concurrent.Executors} class provides factory
65 + methods for the most common kinds and styles of Executors, as well as
66 + a few utilities methods for using them.
67  
68   <h2>Queues</h2>
69  
70 < A basic (nonblocking) Queue interface that is compatatible with
71 < java.util.Collections will be introduced into java.util. Also,
72 < although it is at the borders of being in scope of JSR-166,
73 < java.util.LinkedList will be adapted to support Queue, and
74 < a new non-thread-safe java.util.HeapPriorityQueue will be added.
70 > A basic (nonblocking) {@link java.util.Queue} interface extending
71 > java.util.Collection is introduced into java.util. Existing class
72 > java.util.LinkedList is adapted to support Queue, and a new
73 > non-thread-safe {@link java.util.concurrent.java.util.PriorityQueue}
74 > is added.  The java.util.concurrent {@link
75 > java.util.concurrent.LinkedQueue} class supplies an efficient
76 > thread-safe non-blocking queue.
77  
78   <p> Five implementations in java.util.concurrent support the extended
79 < BlockingQueue interface, that defines blocking versions of put and
80 < take: LinkedBlockingQueue, ArrayBlockingQueue, SynchronousQueue,
81 < PriorityBlockingQueue, and DelayQueue. Additionally,
82 < java.util.concurrent.LinkedQueue supplies an efficient thread-safe
83 < non-blocking queue.
84 <
87 < <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 <
79 > {@link java.util.concurrent.BlockingQueue} interface, that defines
80 > blocking versions of put and take: {@link
81 > java.util.concurrent.LinkedBlockingQueue}, {@link
82 > java.util.concurrent.ArrayBlockingQueue}, {@link
83 > java.util.concurrent.SynchronousQueue}, {@link
84 > java.util.concurrent.PriorityBlockingQueue}, and {@link DelayQueue}.
85  
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> While the Executor framework is intended to be extensible the most
102 commonly used Executor will be ThreadExecutor, which can be configured
103 to act as all sorts of thread pools, background threads, etc. The
104 class is designed to be general enough to suffice for the vast
105 majority of usages, even sophisticated ones, yet also includes methods
106 and functionality that simplify routine usage.
86  
87   <h2>Locks</h2>
88  
89 < The Lock interface supports locking disciplines that differ in
90 < semantics (reentrant, semaphore-based, etc), and that can be used in
91 < non-block-structured contexts including hand-over-hand and lock
92 < reordering algorithms. This flexibility comes at the price of more
93 < awkward syntax.  Implementations include Semaphore, ReentrantMutex
94 < FIFOSemaphore, and CountDownLatch.
95 <
96 < <p>
97 < The Locks class additionally supports trylock-designs using builtin
98 < locks without needing to use Lock classes.  This requires adding new
99 < capabilities to builtin locks inside JVMs.
100 <
101 < <p>
102 < A ReadWriteLock interface similarly defines locks that may be shared
103 < among readers but are exclusive to writers. For this release, only a
125 < single implementation, ReentrantReadWriteLock, is planned, since it
89 > The {@link java.util.concurrent.Lock} interface supports locking
90 > disciplines that differ in semantics (reentrant, fair, etc), and that
91 > can be used in non-block-structured contexts including hand-over-hand
92 > and lock reordering algorithms. This flexibility comes at the price of
93 > more awkward syntax.  Implementations include {@link
94 > java.util.concurrent.ReentrantLock} and {@link
95 > java.util.concurrent.FairReentrantLock}.
96 >
97 > <p> The {@link java.util.concurrent.Locks} class additionally supports
98 > some common trylock-designs using builtin locks.
99 >
100 > <p> The {@link java.util.concurrent.ReadWriteLock} interface similarly
101 > defines locks that may be shared among readers but are exclusive to
102 > writers.  Only a single implementation, {@link
103 > java.util.concurrent.ReentrantReadWriteLock}, is provided, since it
104   covers all standard usage contexts. But programmers may create their
105   own implementations to cover nonstandard requirements.
106  
107   <h2>Conditions</h2>
108  
109 < A Condition class provides the kinds of condition variables associated
110 < with monitors in other cocurrent languages, as well as pthreads
111 < condvars.  Their support reduces the need for tricky and/or
112 < inefficient solutions to many classic concurrent problems.  Conditions
113 < also address the annoying problem that Object.wait(msecs) does not
114 < return an indication of whether the wait timed out. This leads to
115 < error-prone code. Since this method is in class Object, the problem is
116 < basically unfixable.
117 < <p>
118 < To avoid compatibility problems, the names of Condition methods need
119 < to be different than Object versions. The downside of this is that
120 < people can make the mistake of calling cond.notify instead of
143 < cond.signal. However, they will get IllegalMonitorState exceptions if
144 < they do, so they can detect the error if they ever run the code.
145 < <p>
146 < The implementation requires VM magic to atomically suspend and release
147 < lock. But it is unlikely to be very challenging for JVM providers,
148 < since most layer Java monitors on top of posix condvars or similar
149 < low-level functionality anyway.
150 <
151 < <h2>Atomic variables</h2>
152 <
153 < Classes AtomicInteger, AtomicLong, AtomicDouble, AtomicFloat, and
154 < AtomicReference provide simple scalar variables supporting
155 < compareAndSwap (CAS) and related atomic operations. These are
156 < desparately needed by those performing low-level concurrent system
157 < programming, but much less commonly useful in higher-level frameworks.
158 <
109 > The {@link java.util.concurrent.Condition} interface describes the
110 > kinds of condition variables associated with monitors in other
111 > concurrent languages, as well as pthreads-style condvars.  Their
112 > support reduces the need for tricky and/or inefficient solutions to
113 > many classic concurrent problems.  To avoid compatibility problems,
114 > the names of Condition methods are different than Object versions.
115 >
116 > <h2>Atomics</h2>
117 >
118 > The atomic subpackage includes a small library of classes, including
119 > AtomicInteger, AtomicLong, and AtomicReference that support
120 > compareAndSet (CAS) and related atomic operations.
121  
122   <h2>Timing</h2>
123  
124 < Java has always supported sub-millisecond versions of several native
125 < time-out-based methods (such as Object.wait), but not methods to
126 < actually perform timing in finer-grained units. We address this by
165 < introducing class Clock, which provides multiple granularities for
166 < both accessing time and performing time-out based operations.
167 <
124 > The {@link java.util.concurrent.TimeUnit} class provides multiple
125 > granularities (including nanoseconds) for both accessing time and
126 > performing time-out based operations.
127  
128   <h2>Synchronizers</h2>
129  
130   Five classes aid common special-purpose synchronization idioms.
131 < Semaphores and FifoSemaphores are classic concurrency tools.  Latches
132 < are very simple yet very common objects useful for blocking until a
133 < single signal, event, or condition holds.  CyclicBarriers are
134 < resettable multiway synchronization points very common in some styles
135 < of parallel programming. Exchangers allow two threads to exchange
136 < objects at a rendezvous point.
137 <
131 > {@link java.util.concurrent.Semaphore} and {@link
132 > java.util.concurrent.FairSemaphore} are classic concurrency tools.
133 > {@link java.util.concurrent.CountDownLatch} is very simple yet very
134 > common utility for blocking until a single signal, event, or condition
135 > holds.  A {@link CyclicBarrier} is a resettable multiway
136 > synchronization point common in some styles of parallel
137 > programming. An {@link java.util.concurrent.Exchanger} allows two
138 > threads to exchange objects at a rendezvous point.
139  
140   <h2>Concurrent Collections</h2>
141  
142 < JSR 166 will supply a few Collection implementations designed for use
143 < in multithreaded contexts: ConcurrentHashTable, CopyOnWriteArrayList,
144 < and CopyOnWriteArraySet.
142 > This package supplies a few Collection implementations designed for
143 > use in multithreaded contexts: {@link
144 > java.util.concurrent.ConcurrentHashMap}, {@link
145 > java.util.concurrent.CopyOnWriteArrayList}, and {@link
146 > java.util.concurrent.CopyOnWriteArraySet}.
147 >
148 > <p> Most concurrent Collection implementations (including most Queues)
149 > differ from the usual java.util conventions in that their Iterators
150 > provide <em>weakly consistent</em> rather than fast-fail traversal. A
151 > weakly consistent iterator is thread-safe, but does not necessarily
152 > freeze the collection while iterating, so it may (or may not) reflect
153 > any updates since the iterator was created.
154  
155   <h2>Uncaught Exception Handlers</h2>
156  
157 < The java.lang.Thread class will be modified to allow per-thread
157 > The java.lang.Thread class is modified to allow per-thread
158   installation of handlers for uncaught exceptions. Ths optionally
159   disassociates these handlers from ThreadGroups, which has proven to be
160 < too inflexible in many multithreaded programs. (Note that the combination
161 < of features in JSR 166 make ThreadGroups even less likely to
162 < be used in most programs. Perhaps they will eventually be deprecated.)
163 < <p>
164 < Additionally,  ThreadLocals will now support a means to
165 < remove a ThreadLocals, which is needed in some thread-pool and
166 < worker-thread designs.
160 > too inflexible in many multithreaded programs. (Note that the
161 > combination of features in JSR166 make ThreadGroups even less likely
162 > to be used in most programs. Perhaps they will eventually be
163 > deprecated.)
164 >
165 > <p> Additionally, java.lang.ThreadLocal now supports a means to remove
166 > a ThreadLocal, which is needed in some thread-pool and worker-thread
167 > designs.
168  
169    <hr>
170    <address><A HREF="http://gee.cs.oswego.edu/dl">Doug Lea</A></address>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines