[cvs] / jsr166 / src / main / java / util / concurrent / package.html Repository:
ViewVC logotype

Annotation of /jsr166/src/main/java/util/concurrent/package.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (view) (download) (as text)

1 : dl 1.1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 :     <html> <head>
3 :     <title>Concurrency Utilities</title>
4 :     </head>
5 :    
6 :     <body>
7 :    
8 : dl 1.3 <p> Utility classes commonly useful in concurrent programming. This
9 :     package includes a few small standardized extensible frameworks, as
10 :     well as some classes that provide useful functionality and are
11 :     otherwise tedious or difficult to implement. Here are brief
12 :     descriptions of the main components. See also the <tt>locks</tt> and
13 :     <tt>atomic</tt> packages.
14 : dl 1.1
15 :     <h2>Executors</h2>
16 :    
17 :     {@link java.util.concurrent.Executor} is a simple standardized
18 :     interface for defining custom thread-like subsystems, including thread
19 :     pools, asynch-IO, and lightweight task frameworks. Depending on which
20 :     concrete Executor class is being used, tasks may execute in a newly
21 :     created thread, an existing task-execution thread, or the thread
22 :     calling <tt>execute()</tt>, and may execute sequentially or
23 :     concurrently. Executors also standardize ways of calling threads that
24 :     compute functions returning results, via a {@link
25 :     java.util.concurrent.Future}. This is supported in part by defining
26 :     interface {@link java.util.concurrent.Callable}, the argument/result
27 :     analog of Runnable.
28 :    
29 :     <p> {@link java.util.concurrent.ExecutorService} provides a more
30 :     complete framework for executing Runnables. An ExecutorService
31 :     manages queueing and scheduling of tasks, and allows controlled
32 :     shutdown. The two primary implementations of ExecutorService are
33 :     {@link java.util.concurrent.ThreadPoolExecutor}, a highly tunable and
34 :     flexible thread pool and {@link
35 :     java.util.concurrent.ScheduledExecutor}, which adds support for
36 :     delayed and periodic task execution. These, and other Executors can
37 :     be used in conjunction with a {@link java.util.concurrent.FutureTask}
38 :     to asynchronously
39 :     start a potentially long-running computation and query the FutureTask
40 :     to determine if its execution has completed, or cancel it.
41 :    
42 :     <p> The {@link java.util.concurrent.Executors} class provides factory
43 : dl 1.2 methods for the most common kinds and configurations of Executors, as
44 :     well as a few utility methods for using them.
45 : dl 1.1
46 :     <h2>Queues</h2>
47 :    
48 :     The java.util.concurrent {@link
49 :     java.util.concurrent.ConcurrentLinkedQueue} class supplies an
50 : dl 1.2 efficient scalable thread-safe non-blocking FIFO queue.
51 : dl 1.1
52 :     <p> Five implementations in java.util.concurrent support the extended
53 :     {@link java.util.concurrent.BlockingQueue} interface, that defines
54 :     blocking versions of put and take: {@link
55 :     java.util.concurrent.LinkedBlockingQueue}, {@link
56 :     java.util.concurrent.ArrayBlockingQueue}, {@link
57 :     java.util.concurrent.SynchronousQueue}, {@link
58 :     java.util.concurrent.PriorityBlockingQueue}, and {@link
59 : dl 1.2 java.util.concurrent.DelayQueue}. The different classes cover the most
60 :     common usage contexts for producer-consumer, messaging, parallel
61 :     tasking, and related concurrent designs.
62 : dl 1.1
63 :    
64 :     <h2>Timing</h2>
65 :    
66 :     The {@link java.util.concurrent.TimeUnit} class provides multiple
67 : dl 1.2 granularities (including nanoseconds) for specifying and controlling
68 :     time-out based operations. Nearly all other classes in the package
69 :     contain operations based on time-outs in addition to indefinite waits.
70 : dl 1.1
71 : dholmes 1.4 <p>In all cases that time-outs are used, the time-out specifies the
72 :     minimum time that the method should wait before indicating that it
73 :     timed-out. The virtual machine should make a &quot;best effort&quot;
74 :     to detect time-outs as soon as possible after they occur. Regardless
75 :     of the efforts of the virtual machine, the normal scheduling
76 :     mechanisms, and the need to re-acquire locks in many cases, can lead
77 :     to an indefinite amount of time elapsing between a time-out being
78 :     detected and a thread actually executing again after that time-out.
79 :    
80 : dl 1.1 <h2>Synchronizers</h2>
81 :    
82 :     Five classes aid common special-purpose synchronization idioms.
83 :     {@link java.util.concurrent.Semaphore} and {@link
84 :     java.util.concurrent.FairSemaphore} are classic concurrency tools.
85 :     {@link java.util.concurrent.CountDownLatch} is very simple yet very
86 :     common utility for blocking until a single signal, event, or condition
87 :     holds. A {@link java.util.concurrent.CyclicBarrier} is a resettable multiway
88 :     synchronization point common in some styles of parallel
89 :     programming. An {@link java.util.concurrent.Exchanger} allows two
90 :     threads to exchange objects at a rendezvous point.
91 :    
92 :     <h2>Concurrent Collections</h2>
93 :    
94 :     Besides Queues, this package supplies a few Collection implementations
95 :     designed for use in multithreaded contexts: {@link
96 :     java.util.concurrent.ConcurrentHashMap}, {@link
97 :     java.util.concurrent.CopyOnWriteArrayList}, and {@link
98 :     java.util.concurrent.CopyOnWriteArraySet}.
99 :    
100 :     <p>The "Concurrent" prefix for classes is a shorthand
101 :     indicating several differences from similar "synchronized"
102 :     classes. For example <tt>java.util.Hashtable</tt> and
103 :     <tt>Collections.synchronizedMap(new HashMap())</tt> are
104 :     synchronized. But {@link
105 :     java.util.concurrent.ConcurrentHashMap} is "concurrent".
106 :     A concurrent collection (among other kinds of classes) is
107 :     thread-safe, but not governed by a single exclusion lock. So, in the
108 :     particular case of ConcurrentHashMap, it safely permits any number of
109 :     concurrent reads as well as a tunable number of concurrent writes.
110 :     There may still be a role for "synchronized" classes in some
111 :     multithreaded programs -- they can sometimes be useful when you need
112 :     to prevent ALL access to a collection via a single lock, at the
113 :     expense of much poor scalability. In all other cases, "concurrent"
114 :     versions are normally preferable.
115 :    
116 :     <p> Most concurrent Collection implementations (including most Queues)
117 :     also differ from the usual java.util conventions in that their Iterators
118 :     provide <em>weakly consistent</em> rather than fast-fail traversal. A
119 :     weakly consistent iterator is thread-safe, but does not necessarily
120 :     freeze the collection while iterating, so it may (or may not) reflect
121 :     any updates since the iterator was created.
122 :    
123 :    
124 :    
125 :    
126 :     <hr>
127 :     <address><A HREF="http://gee.cs.oswego.edu/dl">Doug Lea</A></address>
128 : dl 1.3 <!-- hhmts start --> Last modified: Wed Aug 6 07:18:31 EDT 2003 <!-- hhmts end -->
129 : dl 1.1 </body> </html>

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8