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.6 by dl, Thu Jun 26 10:46:55 2003 UTC vs.
Revision 1.16 by dl, Tue Mar 30 00:05:00 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 < 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
23 < approved for addition to the Java language, there is no schedule for
24 < their inclusion in a product.
25 < </em>
26 <
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 < <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.
13 > This is the proposed final draft JSR166 specification.  To check for
14 > further updates, or join a mailing list discussing JSR-166, 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 includes some existing java.util
19 > Collection interfaces and classes that are not part of the JSR-166
20 > spec, but are included because JSR-166 methods implement or inherit
21 > from their specifications.</em>
22 >
23 > <p> JSR-166 introduces package <tt>java.util.concurrent</tt>
24 > containing utility classes commonly useful in concurrent
25 > programming. Like package <tt>java.util</tt>, it includes a few small
26 > standardized extensible frameworks, as well as other classes that
27 > provide useful functionality and are otherwise tedious or difficult to
28 > implement.
29 >
30 > <p>JSR-166 focusses on breadth, providing critical functionality
31 > useful across a wide range of concurrent programming styles and
32 > applications, ranging from low-level atomic operations, to
33 > customizable locks and synchronization aids, to various concurrent
34 > data structures, to high-level execution agents including thread
35 > pools. This diversity reflects the range of contexts in which
36 > developers of concurrent programs have been found to require or desire
37 > support not previously available in J2SE, which also keeping the
38 > resulting package small; providing only functionality that has been
39 > found to be worthwhile to standardize.
40 >
41 > <p>Descriptions and brief motivations for the main components may be
42 > found in the associated package documentation.  JSR-166 also includes
43 > a few changes and additions in packages outside of
44 > java.util.concurrent.  Here are brief descriptions.
45  
46   <h2>Queues</h2>
47  
48   A basic (nonblocking) {@link java.util.Queue} interface extending
49 < java.util.Collection is introduced into java.util. Existing class
50 < java.util.LinkedList is adapted to support Queue, and a new
51 < non-thread-safe {@link java.util.PriorityQueue} is added.  The
52 < java.util.concurrent {@link
53 < java.util.concurrent.ConcurrentLinkedQueue} class supplies an
54 < efficient sclable thread-safe non-blocking FIFO queue, and {@link
55 < java.util.concurrent.ConcurrentLinkedStack} provides a similar
56 < non-blocking LIFO stack.
57 <
58 < <p> Five implementations in java.util.concurrent support the extended
59 < {@link java.util.concurrent.BlockingQueue} interface, that defines
60 < blocking versions of put and take: {@link
61 < java.util.concurrent.LinkedBlockingQueue}, {@link
62 < java.util.concurrent.ArrayBlockingQueue}, {@link
63 < java.util.concurrent.SynchronousQueue}, {@link
64 < java.util.concurrent.PriorityBlockingQueue}, and
65 < {@link java.util.concurrent.DelayQueue}.
66 <
67 <
68 < <h2>Locks</h2>
69 <
70 < The {@link java.util.concurrent.Lock} interface supports locking
71 < disciplines that differ in semantics (reentrant, fair, etc), and that
72 < can be used in non-block-structured contexts including hand-over-hand
73 < and lock reordering algorithms. This flexibility comes at the price of
74 < more awkward syntax.  Implementations include {@link
75 < java.util.concurrent.ReentrantLock} and {@link
76 < java.util.concurrent.FairReentrantLock}.
77 <
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 < 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>Atomics</h2>
121 <
122 < The atomic subpackage includes a small library of classes, including
123 < AtomicInteger, AtomicLong, and AtomicReference that support
124 < compareAndSet (CAS) and related atomic operations.
49 > {@link java.util.Collection} is introduced into
50 > <tt>java.util</tt>. Existing class {@link java.util.LinkedList} is
51 > adapted to support Queue, and a new non-thread-safe {@link
52 > java.util.PriorityQueue} is added.
53 >
54 > <h2>Threads</h2>
55 >
56 > Three minor changes are introduced to the {@link java.lang.Thread}
57 > class:
58 > <ul>
59 >  <li> It now allows per-thread installation of handlers for uncaught
60 >  exceptions. Ths optionally disassociates handlers from ThreadGroups,
61 >  which has proven to be too inflexible. (Note that the combination of
62 >  features in JSR-166 make ThreadGroups even less likely to be used in
63 >  most programs. Perhaps they will eventually be deprecated.)
64 >
65 >  <li> Access checks are no longer required when a Thread interrupts
66 >  <em>itself</em>.  The <tt>interrupt</tt> method is the only way to
67 >  re-assert a thread's interruption status (and in the case of
68 >  self-interruption has no other effect than this).  The check here
69 >  previously caused unjustifiable and uncontrollable failures when
70 >  restricted code invoked library code that must reassert interruption
71 >  to correctly propagate status when encountering some
72 >  <tt>InterruptedExceptions</tt>.
73 >  <li> The <tt>destroy</tt> method, which has never been implemented,
74 >  has finally been deprecated. This is just a spec change, reflecting
75 >  the fact that that the reason it has never been implemented is that
76 >  it was undesirable and unworkable.
77 > </ul>
78  
79   <h2>Timing</h2>
80  
81 < The {@link java.util.concurrent.TimeUnit} class provides multiple
82 < granularities (including nanoseconds) for both accessing time and
83 < performing time-out based operations.
84 <
85 < <h2>Synchronizers</h2>
133 <
134 < Five classes aid common special-purpose synchronization idioms.
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 <
144 < <h2>Concurrent Collections</h2>
145 <
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 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
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.)
81 > Method <tt>nanoTime</tt> is added to {@link java.lang.System}. It
82 > provides a high-precision timing facility that is distinct from and
83 > uncoordinated with <tt>System.currentTimeMillis</tt>.
84 >
85 > <h2>Removing ThreadLocals</h2>
86  
87 < <p> Additionally, java.lang.ThreadLocal now supports a means to remove
87 > The {@link java.lang.ThreadLocal} class now supports a means to remove
88   a ThreadLocal, which is needed in some thread-pool and worker-thread
89   designs.
90  
91 +
92 +
93    <hr>
190  <address><A HREF="http://gee.cs.oswego.edu/dl">Doug Lea</A></address>
94   </body>
95   </html>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines