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.20 by dl, Sun Dec 26 20:13:40 2004 UTC

# Line 1 | Line 1
1   <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2   <html>
3   <head>
4 <   <title>JSR 166 Snapshot Introduction.</title>
4 >   <title>JSR 166 Introduction.</title>
5    </head>
6  
7    <body bgcolor="#ffffee" vlink="#0000aa" link="#cc0000">
8 <  <h1>JSR 166 Snapshot Introduction.</h1>
8 >  <h1>JSR 166 Introduction.</h1>
9  
10    by <a href="http://gee.cs.oswego.edu/dl">Doug Lea</a>
11    <p>
12  
13 < To join a mailing list discussing this JSR, go to:
14 < <A HREF="http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest"> http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest</A> .
15 <
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
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
23 < approved for addition to the Java language, there is no schedule for
24 < their inclusion in a product.
13 > This is maintenance repository of JSR166 specifications.  For further
14 > information, go to: <A
15 > HREF="http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest">
16 > http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest</A>.
17 >
18 > <p><em>Note: The javadocs here do <em>not</em> include pre-existing
19 > java classes (for example <tt>java.lang.Thread</tt>) that were changed
20 > as part of the JSR166 spec.  On the other hand, the javadocs here do
21 > include some existing java.util Collection interfaces and classes that
22 > are not part of the spec, but are included because some new methods
23 > implement or inherit from their specifications.
24   </em>
25  
26 < <p>
27 < Package java.util.concurrent contains utility classes that are
28 < commonly useful in concurrent programming. Like package java.util, it
29 < includes a few small standardized extensible frameworks, as well as
30 < some classes that provide useful functionality and are otherwise
31 < tedious or difficult to implement.  In this JSR, we have been
32 < conservative in selecting only those APIs and implementations that are
33 < useful enough to encourage nearly all concurrent programmers to use
34 < routinely.  JSR 166 also includes a few changes and additions in
35 < packages outside of java.util.concurrent: java.lang, to address
36 < uncaught exceptions, and java.util to better integrate queues.
37 < The API covers:
38 <
39 <  <ul>
40 <    <li> Queues
41 <    <li> Executors
42 <    <li> Locks
43 <    <li> Condition variables
44 <    <li> Atomic variables
45 <    <li> Timing
46 <    <li> Synchronizers
47 <    <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.
65 <
66 < <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>
70 <
26 > <p> JSR-166 introduces package <tt>java.util.concurrent</tt>
27 > containing utility classes commonly useful in concurrent
28 > programming. Like package <tt>java.util</tt>, it includes a few small
29 > standardized extensible frameworks, as well as other classes that
30 > provide useful functionality and are otherwise tedious or difficult to
31 > implement.
32 >
33 > <p>JSR-166 focusses on breadth, providing critical functionality
34 > useful across a wide range of concurrent programming styles and
35 > applications, ranging from low-level atomic operations, to
36 > customizable locks and synchronization aids, to various concurrent
37 > data structures, to high-level execution agents including thread
38 > pools. This diversity reflects the range of contexts in which
39 > developers of concurrent programs have been found to require or desire
40 > support not previously available in J2SE, which also keeping the
41 > resulting package small; providing only functionality that has been
42 > found to be worthwhile to standardize.
43 >
44 > <p>Descriptions and brief motivations for the main components may be
45 > found in the associated package documentation.  JSR-166 also includes
46 > a few changes and additions in packages outside of
47 > java.util.concurrent.  Here are brief descriptions.
48  
49   <h2>Queues</h2>
50  
51 < A basic (nonblocking) Queue interface that is compatatible with
52 < java.util.Collections will be introduced into java.util. Also,
53 < although it is at the borders of being in scope of JSR-166,
54 < java.util.LinkedList will be adapted to support Queue, and
55 < a new non-thread-safe java.util.HeapPriorityQueue will be added.
56 <
57 < <p> Five implementations in java.util.concurrent support the extended
58 < BlockingQueue interface, that defines blocking versions of put and
59 < take: LinkedBlockingQueue, ArrayBlockingQueue, SynchronousQueue,
60 < PriorityBlockingQueue, and DelayQueue. Additionally,
61 < java.util.concurrent.LinkedQueue supplies an efficient thread-safe
62 < non-blocking queue.
63 <
64 < <p> Since the target release is JDK1.5, and generics are slated to be
65 < in 1.5, Queues are parametrized on element type. (Also some others
66 < below.)
67 <
68 <
69 < <h2>Executors</h2>
70 <
71 < Executors provide a simple standardized interface for defining custom
72 < thread-like subsystems, including thread pools, asynch-IO, and
73 < lightweight task frameworks.  Executors also standardize ways of
74 < calling threads that compute functions returning results, via
75 < Futures. This is supported in part by defining interface Callable, the
76 < argument/result analog of Runnable.
77 <
78 < <p> While the Executor framework is intended to be extensible the most
79 < commonly used Executor will be ThreadExecutor, which can be configured
80 < 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.
107 <
108 < <h2>Locks</h2>
109 <
110 < The Lock interface supports locking disciplines that differ in
111 < semantics (reentrant, semaphore-based, etc), and that can be used in
112 < non-block-structured contexts including hand-over-hand and lock
113 < reordering algorithms. This flexibility comes at the price of more
114 < awkward syntax.  Implementations include Semaphore, ReentrantMutex
115 < FIFOSemaphore, and CountDownLatch.
116 <
117 < <p>
118 < The Locks class additionally supports trylock-designs using builtin
119 < locks without needing to use Lock classes.  This requires adding new
120 < capabilities to builtin locks inside JVMs.
121 <
122 < <p>
123 < A ReadWriteLock interface similarly defines locks that may be shared
124 < among readers but are exclusive to writers. For this release, only a
125 < single implementation, ReentrantReadWriteLock, is planned, since it
126 < covers all standard usage contexts. But programmers may create their
127 < own implementations to cover nonstandard requirements.
128 <
129 < <h2>Conditions</h2>
130 <
131 < A Condition class provides the kinds of condition variables associated
132 < with monitors in other cocurrent languages, as well as pthreads
133 < condvars.  Their support reduces the need for tricky and/or
134 < inefficient solutions to many classic concurrent problems.  Conditions
135 < also address the annoying problem that Object.wait(msecs) does not
136 < return an indication of whether the wait timed out. This leads to
137 < error-prone code. Since this method is in class Object, the problem is
138 < basically unfixable.
139 < <p>
140 < To avoid compatibility problems, the names of Condition methods need
141 < to be different than Object versions. The downside of this is that
142 < 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 <
51 > A basic (nonblocking) {@link java.util.Queue} interface extending
52 > {@link java.util.Collection} is introduced into
53 > <tt>java.util</tt>. Existing class {@link java.util.LinkedList} is
54 > adapted to support Queue, and a new non-thread-safe {@link
55 > java.util.PriorityQueue} is added.
56 >
57 > <h2>Threads</h2>
58 >
59 > Three minor changes are introduced to the {@link java.lang.Thread}
60 > class:
61 > <ul>
62 >  <li> It now allows per-thread installation of handlers for uncaught
63 >  exceptions. Ths optionally disassociates handlers from ThreadGroups,
64 >  which has proven to be too inflexible. (Note that the combination of
65 >  features in JSR-166 make ThreadGroups even less likely to be used in
66 >  most programs. Perhaps they will eventually be deprecated.)
67 >
68 >  <li> Access checks are no longer required when a Thread interrupts
69 >  <em>itself</em>.  The <tt>interrupt</tt> method is the only way to
70 >  re-assert a thread's interruption status (and in the case of
71 >  self-interruption has no other effect than this).  The check here
72 >  previously caused unjustifiable and uncontrollable failures when
73 >  restricted code invoked library code that must reassert interruption
74 >  to correctly propagate status when encountering some
75 >  <tt>InterruptedExceptions</tt>.
76 >  <li> The <tt>destroy</tt> method, which has never been implemented,
77 >  has finally been deprecated. This is just a spec change, reflecting
78 >  the fact that that the reason it has never been implemented is that
79 >  it was undesirable and unworkable.
80 > </ul>
81  
82   <h2>Timing</h2>
83  
84 < Java has always supported sub-millisecond versions of several native
85 < time-out-based methods (such as Object.wait), but not methods to
86 < actually perform timing in finer-grained units. We address this by
87 < introducing class Clock, which provides multiple granularities for
88 < both accessing time and performing time-out based operations.
89 <
90 <
91 < <h2>Synchronizers</h2>
92 <
93 < Five classes aid common special-purpose synchronization idioms.
94 < Semaphores and FifoSemaphores are classic concurrency tools.  Latches
173 < are very simple yet very common objects useful for blocking until a
174 < single signal, event, or condition holds.  CyclicBarriers are
175 < resettable multiway synchronization points very common in some styles
176 < of parallel programming. Exchangers allow two threads to exchange
177 < objects at a rendezvous point.
178 <
179 <
180 < <h2>Concurrent Collections</h2>
181 <
182 < JSR 166 will supply a few Collection implementations designed for use
183 < in multithreaded contexts: ConcurrentHashTable, CopyOnWriteArrayList,
184 < and CopyOnWriteArraySet.
185 <
186 < <h2>Uncaught Exception Handlers</h2>
187 <
188 < The java.lang.Thread class will be modified to allow per-thread
189 < installation of handlers for uncaught exceptions. Ths optionally
190 < disassociates these handlers from ThreadGroups, which has proven to be
191 < too inflexible in many multithreaded programs. (Note that the combination
192 < of features in JSR 166 make ThreadGroups even less likely to
193 < be used in most programs. Perhaps they will eventually be deprecated.)
194 < <p>
195 < Additionally,  ThreadLocals will now support a means to
196 < remove a ThreadLocals, which is needed in some thread-pool and
197 < worker-thread designs.
84 > Method <tt>nanoTime</tt> is added to {@link java.lang.System}. It
85 > provides a high-precision timing facility that is distinct from and
86 > uncoordinated with <tt>System.currentTimeMillis</tt>.
87 >
88 > <h2>Removing ThreadLocals</h2>
89 >
90 > The {@link java.lang.ThreadLocal} class now supports a means to remove
91 > a ThreadLocal, which is needed in some thread-pool and worker-thread
92 > designs.
93 >
94 >
95  
96    <hr>
200  <address><A HREF="http://gee.cs.oswego.edu/dl">Doug Lea</A></address>
97   </body>
98   </html>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines