ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/package.html
Revision: 1.9
Committed: Mon Oct 6 11:16:47 2003 UTC (20 years, 8 months ago) by dl
Content type: text/html
Branch: MAIN
Changes since 1.8: +33 -34 lines
Log Message:
Improved summary docs

File Contents

# User Rev Content
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 dl 1.9 pools, asynchronous IO, and lightweight task frameworks. Depending on
20     which concrete Executor class is being used, tasks may execute in a
21     newly created thread, an existing task-execution thread, or the thread
22 dl 1.1 calling <tt>execute()</tt>, and may execute sequentially or
23 dl 1.9 concurrently.
24 dl 1.1
25     <p> {@link java.util.concurrent.ExecutorService} provides a more
26     complete framework for executing Runnables. An ExecutorService
27     manages queueing and scheduling of tasks, and allows controlled
28     shutdown. The two primary implementations of ExecutorService are
29 dl 1.5 {@link java.util.concurrent.ThreadPoolExecutor}, a tunable and
30 dl 1.1 flexible thread pool and {@link
31     java.util.concurrent.ScheduledExecutor}, which adds support for
32 dl 1.9 delayed and periodic task execution. The {@link
33     java.util.concurrent.Executors} class provides factory methods for the
34     most common kinds and configurations of Executors, as well as a few
35     utility methods for using them.
36    
37     <p> Executors may be used with threads that compute functions
38     returning results. A {@link java.util.concurrent.Future} returns the
39     results of a {@link java.util.concurrent.Callable}, the result-bearing
40     analog of {@link java.lang.Runnable}. Instances of concrete class
41     {@link java.util.concurrent.FutureTask} may be submitted to Executors
42     to asynchronously start a potentially long-running computation, query
43     to determine if its execution has completed, or cancel it. The {@link
44     java.util.concurrent.CancellableTask} class provides similar control
45     for actions that do not bear results.
46 dl 1.1
47     <h2>Queues</h2>
48    
49 dl 1.6 The java.util.concurrent {@link
50 dl 1.1 java.util.concurrent.ConcurrentLinkedQueue} class supplies an
51 dl 1.6 efficient scalable thread-safe non-blocking FIFO queue. Five
52     implementations in java.util.concurrent support the extended {@link
53     java.util.concurrent.BlockingQueue} interface, that defines blocking
54     versions of put and take: {@link
55 dl 1.1 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 dl 1.9 time-out based operations. Most classes in the package contain
69     operations based on time-outs in addition to indefinite waits. In all
70     cases that time-outs are used, the time-out specifies the minimum time
71     that the method should wait before indicating that it
72     timed-out. Implementations make a &quot;best effort&quot; to detect
73     time-outs as soon as possible after they occur. However, an indefinite
74     amount of time may elapse between a time-out being detected and a
75     thread actually executing again after that time-out.
76 dholmes 1.4
77 dl 1.1 <h2>Synchronizers</h2>
78    
79     Five classes aid common special-purpose synchronization idioms.
80     {@link java.util.concurrent.Semaphore} and {@link
81     java.util.concurrent.FairSemaphore} are classic concurrency tools.
82     {@link java.util.concurrent.CountDownLatch} is very simple yet very
83     common utility for blocking until a single signal, event, or condition
84     holds. A {@link java.util.concurrent.CyclicBarrier} is a resettable multiway
85     synchronization point common in some styles of parallel
86     programming. An {@link java.util.concurrent.Exchanger} allows two
87     threads to exchange objects at a rendezvous point.
88    
89     <h2>Concurrent Collections</h2>
90    
91     Besides Queues, this package supplies a few Collection implementations
92     designed for use in multithreaded contexts: {@link
93     java.util.concurrent.ConcurrentHashMap}, {@link
94     java.util.concurrent.CopyOnWriteArrayList}, and {@link
95     java.util.concurrent.CopyOnWriteArraySet}.
96    
97 dl 1.6 <p>The "Concurrent" prefix used with some classes in this package is a
98     shorthand indicating several differences from similar "synchronized"
99 dl 1.1 classes. For example <tt>java.util.Hashtable</tt> and
100     <tt>Collections.synchronizedMap(new HashMap())</tt> are
101 dl 1.6 synchronized. But {@link java.util.concurrent.ConcurrentHashMap} is
102     "concurrent". A concurrent collection is thread-safe, but not
103     governed by a single exclusion lock. In the particular case of
104     ConcurrentHashMap, it safely permits any number of concurrent reads as
105 dl 1.9 well as a tunable number of concurrent writes. "Synchronized" classes
106     can be useful when you need to prevent all access to a collection via
107     a single lock, at the expense of poorer scalability. In other cases in
108     which multiple threads are expected to access a common collection,
109     "concurrent" versions are normally preferable. And unsynchronized
110     collections are preferable when either collections are unshared, or
111     are accessible only when holding other locks.
112 dl 1.1
113     <p> Most concurrent Collection implementations (including most Queues)
114     also differ from the usual java.util conventions in that their Iterators
115     provide <em>weakly consistent</em> rather than fast-fail traversal. A
116     weakly consistent iterator is thread-safe, but does not necessarily
117     freeze the collection while iterating, so it may (or may not) reflect
118     any updates since the iterator was created.
119    
120     </body> </html>