ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/package.html
Revision: 1.13
Committed: Sat Dec 20 18:57:32 2003 UTC (20 years, 5 months ago) by dl
Content type: text/html
Branch: MAIN
Changes since 1.12: +4 -3 lines
Log Message:
Documentation improvements

File Contents

# Content
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html> <head>
3 <title>Concurrency Utilities</title>
4 </head>
5
6 <body>
7
8 <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
15 <h2>Executors</h2>
16
17 <b>Interfaces.</b> {@link java.util.concurrent.Executor} is a simple
18 standardized interface for defining custom thread-like subsystems,
19 including thread pools, asynchronous IO, and lightweight task
20 frameworks. Depending on which concrete Executor class is being used,
21 tasks may execute in a newly created thread, an existing
22 task-execution thread, or the thread calling <tt>execute()</tt>, and
23 may execute sequentially or concurrently. {@link
24 java.util.concurrent.ExecutorService} provides a more complete
25 asynchronous task execution framework. An ExecutorService manages
26 queueing and scheduling of tasks, and allows controlled shutdown. The
27 {@link java.util.concurrent.ScheduledExecutorService} subinterface
28 adds support for delayed and periodic task execution.
29 ExecutorServices provide methods arranging asynchronous execution of
30 any function expressed as {@link java.util.concurrent.Callable}, the
31 result-bearing analog of {@link java.lang.Runnable}. A {@link
32 java.util.concurrent.Future} returns the results of a function, allows
33 determination if execution has completed, and provides a means to
34 cancel execution.
35
36 <p>
37
38 <b>Implementations.</b> The two primary Executor implementations are
39 tunable, flexible thread pool classes {@link
40 java.util.concurrent.ThreadPoolExecutor} and {@link
41 java.util.concurrent.ScheduledThreadPoolExecutor}. The {@link
42 java.util.concurrent.Executors} class provides factory methods for the
43 most common kinds and configurations of Executors, as well as a few
44 utility methods for using them. Other utilities based on Executors
45 include the concrete class {@link java.util.concurrent.FutureTask}
46 providing a common extensible implementation of Futures, and {@link
47 java.util.concurrent.ExecutorCompletionService}, that assists in
48 coordinating the processing of groups of asynchronous tasks.
49
50 <h2>Queues</h2>
51
52 The java.util.concurrent {@link
53 java.util.concurrent.ConcurrentLinkedQueue} class supplies an
54 efficient scalable thread-safe non-blocking FIFO queue. Five
55 implementations in java.util.concurrent support the extended {@link
56 java.util.concurrent.BlockingQueue} interface, that defines blocking
57 versions of put and take: {@link
58 java.util.concurrent.LinkedBlockingQueue}, {@link
59 java.util.concurrent.ArrayBlockingQueue}, {@link
60 java.util.concurrent.SynchronousQueue}, {@link
61 java.util.concurrent.PriorityBlockingQueue}, and {@link
62 java.util.concurrent.DelayQueue}. The different classes cover the most
63 common usage contexts for producer-consumer, messaging, parallel
64 tasking, and related concurrent designs.
65
66
67 <h2>Timing</h2>
68
69 The {@link java.util.concurrent.TimeUnit} class provides multiple
70 granularities (including nanoseconds) for specifying and controlling
71 time-out based operations. Most classes in the package contain
72 operations based on time-outs in addition to indefinite waits. In all
73 cases that time-outs are used, the time-out specifies the minimum time
74 that the method should wait before indicating that it
75 timed-out. Implementations make a &quot;best effort&quot; to detect
76 time-outs as soon as possible after they occur. However, an indefinite
77 amount of time may elapse between a time-out being detected and a
78 thread actually executing again after that time-out.
79
80 <h2>Synchronizers</h2>
81
82 Four classes aid common special-purpose synchronization idioms.
83 {@link java.util.concurrent.Semaphore} is a classic concurrency tool.
84 {@link java.util.concurrent.CountDownLatch} is very simple yet very
85 common utility for blocking until a given number of signals, events,
86 or conditions hold. A {@link java.util.concurrent.CyclicBarrier} is a
87 resettable multiway synchronization point useful in some styles of
88 parallel programming. An {@link java.util.concurrent.Exchanger} allows
89 two threads to exchange objects at a rendezvous point, and is useful
90 in several pipeline designs.
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 used with some classes in this package is a
101 shorthand 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 java.util.concurrent.ConcurrentHashMap} is
105 "concurrent". A concurrent collection is thread-safe, but not
106 governed by a single exclusion lock. In the particular case of
107 ConcurrentHashMap, it safely permits any number of concurrent reads as
108 well as a tunable number of concurrent writes. "Synchronized" classes
109 can be useful when you need to prevent all access to a collection via
110 a single lock, at the expense of poorer scalability. In other cases in
111 which multiple threads are expected to access a common collection,
112 "concurrent" versions are normally preferable. And unsynchronized
113 collections are preferable when either collections are unshared, or
114 are accessible only when holding other locks.
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 </body> </html>