summaryrefslogtreecommitdiff
path: root/java/java/common/lib/backport-util-concurrent/README.html
diff options
context:
space:
mode:
Diffstat (limited to 'java/java/common/lib/backport-util-concurrent/README.html')
-rw-r--r--java/java/common/lib/backport-util-concurrent/README.html614
1 files changed, 0 insertions, 614 deletions
diff --git a/java/java/common/lib/backport-util-concurrent/README.html b/java/java/common/lib/backport-util-concurrent/README.html
deleted file mode 100644
index 7e4ab10e14..0000000000
--- a/java/java/common/lib/backport-util-concurrent/README.html
+++ /dev/null
@@ -1,614 +0,0 @@
-<html>
- <head>
- <title>backport-util-concurrent - Distributed Computing Laboratory</title>
- <meta content="java.util.concurrent backport">
- </head>
- <body>
-
-<h1>backport-util-concurrent</h1>
-<p>Backport ot JSR 166 (java.util.concurrent) to Java 1.4</p>
-<p><a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/">http://dcl.mathcs.emory.edu/util/backport-util-concurrent/</a></p>
-<hr class="hide">
-
-<h2>Overview</h2>
-
-<p>
-This package is the backport of
-<a href="http://gee.cs.oswego.edu/dl/concurrency-interest/">java.util.concurrent</a> API,
-introduced in
-<a href="http://java.sun.com/j2se/1.5.0/docs/guide/concurrency/overview.html">Java 5.0</a>,
-to Java 1.4. The backport is based on public-domain sources from the
-<a href="http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/">
-JSR 166 CVS repository</a>, the
-<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html">
-dl.util.concurrent</a> package, and the Doug Lea's
-<a href="http://gee.oswego.edu/dl/classes/collections/">
-collections</a> package.
-
-The backport is close to complete; unsupported functionality is
-limited to: 1) classes that rely on explicit
-JVM support and cannot be emulated at a satisfactory
-performance level, 2) some of the functions
-described in the original javadoc as "designed primarily for use in
-monitoring in system state, not for synchronization control", or 3)
-functionality
-that would require development of substantial amount of new code.
-</p>
-<p>
-The purpose of this library is to enable gradual migration from Java 1.4
-to 5.0: the library allows to develop concurrent applications for Java 1.4
-that should work with Java 5.0 simply by changing package names.
-</p>
-
-<h3>License</h3>
-
-<p>
-This software is released to the
-<a href="http://creativecommons.org/licenses/publicdomain">public domain</a>,
-in the spirit of the original code written by Doug Lea.
-The code can be used for any purpose, modified, and redistributed
-without acknowledgment. No warranty is provided, either express or implied.
-</p>
-<p>
-<em>Note:</em> versions prior to 2.1 had dependencies on proprietary code.
- Versions 2.1 and newer do not have such dependencies anymore.
-</p>
-
-<h3>Features</h3>
-
-<p>
-The following functionality of java.util.concurrent is supported in the backport:
-<ul>
-<li>All JSR 166 executors, utilities, and everything related (thread pools,
-FutureTask, scheduled tasks and executors, etc.)</li>
-<li>Locks: ReentrantLock, Semaphore, ReentrantReadWriteLock, Conditions</li>
-<li>Queues: synchronous, array, linked, delay, and priority queues</li>
-<li>Deques: array, and linked deques</li>
-<li>Atomics: everything except reflection-based updaters</li>
-<li>Other concurrency utils: CountDownLatch, CyclicBarrier, Exchanger</li>
-<li>Concurrent collections: ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteArraySet,
- ConcurrentLinkedQueue,
- ConcurrentSkipList[Map,Set]</li>
-<li>Retrofitted standard collections</li>
-</ul>
-</p>
-
-<h2>Compatibility</h2>
-
-JSR 166 functionality is tied closely to the Java 5.0 Virtual Machine, and some aspects of it
-cannot be fully
-backported to Java 1.4. This section discusses these differences between the backport and
-JSR 166.
-
-<h3>Package Names</h3>
-
-<p>Since user libraries cannot define classes in
-java.* packages, all the original package names have been prefixed with
-<code>edu.emory.mathcs.backport</code>. For instance, <code>java.util.concurrent.Future</code> becomes <code>edu.emory.mathcs.backport.java.util.concurrent.Future</code>.
-</p>
-
-<h3>Differences between versions</h3>
-
-<p>
-The backport, version 1.1 and above, includes
-functionality of JSR 166 that has been added in Java 6.0.
-Pay attention to the "since" javadoc tags if conformance with specific
-Java platform versions is desired. Examples of "since 1.6" functionality include:
-deques, navigable maps and sets (including ConcurrentSkipList[Map,Set]),
-"newTaskFor" in AbstractExecutorService,
-"lazySet" in atomics, RunnableFuture and RunnableScheduledFuture,
-"allowCoreThreadTimeout" in ThreadPoolExecutor,
-"decorateTask" in ScheduledThreadPoolExecutor, MINUTES, HOURS, and DAYS in TimeUnit,
-and appropriate retrofits in collection classes. As of backport version 2.2, these
-features are based on beta versions of Java 6.0 APIs, which may still change in the future.
-</p>
-<p>Backport is developed carefully to retain link-time compatibility, i.e. it is generally
- safe to replace an old library JAR with a new one (with a possible exception of APIs
- based on beta releases, e.g. current "since 1.6" classes and methods). Serial compatibility
- (i.e. ability of
- one version to deserialize objects that has been serialized using a different version)
- is maintained on a best-effort basis, and not always guaranteed.
- Please see details below. (Note that concurrency tools are usually not intended for
- persistent storage anyway). Compile-time compatibility: applications using
- wildcard imports (e.g. java.util.* and edu.emory.mathcs.backport.java.util.*) may
- cease to compile with updated backport versions (containing new classes)
- due to import ambiguities. In such cases, you must dis-ambiguate
- imports (i.e. use explicit imports as appropriate) and recompile.
-</p>
-<p>Notes for version 2.2:
- Link-time and serial compatibility is fully preserved for "since 1.5" APIs. For
- "since 1.6" APIs, link-time and serial compatibility is preserved except for
- navigable maps and sets, which API has recently changed slightly in
- Java 6.0 beta.
-</p>
-<p>Notes for version 2.1:
- Link-time compatibility is preserved fully.
- Serial compatibility is preserved except for the class ReentrantReadWriteLock.
-</p>
-<p>Notes for version 2.0:
-<ul>
-<li>the "concurrent.Concurrent" class has been removed as of backport 2.0.</li>
-<li>Serialized representations
- of several lock classes have changed between versions 1.1_01 and 2.0,
- as a result of certain bug fixes and performance improvements (see changelog).
- This means that locks and collections serialized with 1.1_01 will not be
- deserialized properly by 2.0.
-</li>
-</ul>
-</p>
-
-<h3>Unsupported functionality</h3>
-
-<p>
-Detailed listing of functionality that has not been backported
-is presented below.
-</p>
-
-<h4>Java 5.0 Syntax</h4>
-<p>
-Package java.util.concurrent exploits new language features
-introduced in Java 5.0. In particular, most API classes are
-<a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html">generic types</a>.
-In the backport, they have been flattened to standard, non-generic
-classes. Still, programs linked against the backport should compile
-with Java 5.0 (after changing package names). Nevertheless, you may
-want to consider gradually switching to using generics once you make
-the transition to Java 5.0, since it gives better compile-time
-type checking.
-</p>
-
-<h4>In Condition</h4>
-<p>
-Method long awaitNanos(long nanosTimeout) is not supported, since the
-emulation cannot reliably report remaining times with nanosecond
-precision. Thus, it probably would be too dangerous to leave the
-emulated method in the Condition interface. However, the method is
-still available, for those who know what they are doing,
-in the <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html">util.concurrent.helpers.Utils</a> class.
-</p>
-
-<h4>In ReentrantLock</h4>
-<p>
-the following monitoring methods are supported only for fair locks:
-boolean hasQueuedThreads(), int getQueueLength(), Collection
-getQueuedThreads(), boolean isQueued(), boolean hasWaiters(Condition),
-int getWaitQueueLength(Condition),
-Collection getWaitingThreads(Condition).
-</p>
-
-<h4>In ReentrantReadWriteLock</h4>
-<p>
-The current backport implementation is based on dl.util.concurrent class
-ReentrantWriterPreferenceReadWriteLock, and thus slightly departs
-from java.util.concurrent that does not specify acquisition order but
-allows to enable/disable fairness. The backport implementation does not
-have a single-parameter constructor allowing to specify fairness policy;
-it always behaves like writer-preference lock with no fairness guarantees.
-Because of these characteristics, this class is compliant with JSR 166
-specification of non-fair reentrant read-write locks, while the exact
-semantics of fair locks are not supported (and the appropriate
-constructor is thus not provided).
-</p>
-<p>
-Also, the following instrumentation and status methods are not
-supported: Collection getQueuedWriterThreads(), Collection
-getQueuedReaderThreads(), boolean hasQueuedThreads(), boolean
-hasQueuedThread(Thread), Collection getQueuedThreads(), boolean
-hasWaiters(Condition), int getWaitQueueLength(Condition), Collection
-getWaitingThreads(Condition).
-</p>
-
-<h4>In Semaphore</h4>
-<p>
-Blocking atomic multi-acquires: acquire(int permits)
-and
-tryAcquire(int permits, long timeout, TimeUnit unit)
-are supported only for FAIR semaphores.
-</p>
-
-<h4>Platform-level functionality</h4>
-<p>
-To emulate System.nanoTime(), the method
-<a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/Utils.html#nanoTime()">nanoTime()</a>
-is provided in the class
-dl.util.concurrent.helpers.Utils. On Java 1.4.2, it attempts to use
-high-precision timer via sun.misc.Perf (thanks to Craig Mattocks
-for suggesting this). On older Java platforms, or when sun.misc.Perf
-is not supported, it falls back to System.currentTimeMillis().
-</p>
-<p>
-Class <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/ThreadHelpers.html">ThreadHelpers</a>
-(added in 1.0_01) is provided to emulate certain aspects of Thread.UncaughtExceptionHandler.
-</p>
-
-<h4>Note on nanosecond precision timing</h4>
-<p>
-The backport strives to honor nanosecond timeouts, if such are requested,
-by using two-parameter variant of Object.wait(). Note, however, that most
-Java platforms before 5.0 will round up the timeout to full milliseconds
-anyway.
-</p>
-
-<h4>Low-level concurrency classes</h4>
-<p>
-The following classes are not supported:
-LockSupport, AbstractQueuedSynchronizer, AbstractQueuedLongSynchronizer.
-</p><p><i>Rationale: </i> on Java 5.0, these classes depend on explicit
-JVM support, delegating to low-level OS concurrency primitives. There seems
-to be no simple way of emulating them without introducing prohibitive
-performance overhead. (If you think they should be present in the backport
-anyway, let me know).
-</p>
-
-<h4>Atomic utilities</h4>
-<p>
-The following "atomic" utilities are not supported:
-Atomic[Integer,Long,Reference]FieldUpdater.
-
-</p>
-
-<h2>Robustness</h2>
-
-<p>
-Backport-util-concurrent is based in large part on source code from JSR 166
-and dl.util.concurrent, both very
-well tested. Whenever possible, the JSR 166 code was used. In cases when
-it was infeasible (e.g. for performance reasons),
-the dl.util.concurrent code was adapted. The new
-code was introduced only when absolutely necessary, e.g. to make
-dl.util.concurrent code conforming to JSR 166 interfaces and semantics. This
-partially explains why so few bugs have been reported again the backport,
-despite over 10,000 downloads and many deployments in commercial and
-open-source projects.
-</p>
-
-<h3>Unit tests</h3>
-<p>
-Version 2.1 of the library passes all the relevant 1859 unit tests from
-<a href="http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/test/tck/">TCK test package</a>
-designed for java.util.concurrent (the tests of unsupported functionality
-were skipped).
-</p>
-<p>
-The following unit tests have been completed (listed in the alphabetical order):
-AbstractExecutorServiceTest,
-AbstractQueueTest,
-ArrayBlockingQueueTest,
-ArrayDequeTest,
-AtomicBooleanTest,
-AtomicIntegerArrayTest,
-AtomicIntegerTest,
-AtomicLongArrayTest,
-AtomicLongTest,
-AtomicMarkableReferenceTest,
-AtomicReferenceArrayTest,
-AtomicReferenceTest,
-AtomicStampedReferenceTest,
-ConcurrentHashMapTest,
-ConcurrentLinkedQueueTest,
-ConcurrentSkipListMapTest,
-ConcurrentSkipListSubMapTest,
-ConcurrentSkipListSetTest,
-ConcurrentSkipListSubSetTest,
-CopyOnWriteArrayListTest,
-CopyOnWriteArraySetTest,
-CountDownLatchTest,
-CyclicBarrierTest,
-DelayQueueTest,
-EntryTest,
-ExchangerTest,
-ExecutorsTest,
-ExecutorCompletionServiceTest,
-FutureTaskTest,
-LinkedBlockingDequeTest,
-LinkedBlockingQueueTest,
-LinkedListTest,
-PriorityBlockingQueueTest,
-PriorityQueueTest,
-ReentrantLockTest,
-ReentrantReadWriteLockTest,
-ScheduledExecutorTest,
-ScheduledExecutorSubclassTest,
-SemaphoreTest,
-SynchronousQueueTest,
-SystemTest (testing Utils.nanoTime()),
-ThreadLocalTest,
-ThreadPoolExecutorTest,
-ThreadPoolExecutorSubclassTest,
-TimeUnitTest,
-TreeMapTest,
-TreeSubMapTest,
-TreeSetTest,
-TreeSubSetTest.
-</p>
-
-<h3>Stress tests</h3>
-<p>
-Starting from version 1.1_01, the
-backport is being stress-tested using the "loops" tests from JSR 166
-(courtesy of Doug Lea and the JSR 166 Expert Group). The tests, included
-in the development source
-bundle, thoroughly evaluate behavior and performance of various types
-of locks, queues, maps, futures, and other API classes, under various
-conditions (contention etc.) and circumstances, including cancellation.
-</p>
-
-<p>
-Despite exhaustive testing, as any software, this library may still contain
-bugs. If you find one, please report it, or better yet, contribute a fix.
-</p>
-
-<h3>Known problems</h3>
-
-<p>
-<strong>Note: </strong>A bug has been reported against Sun 1.4.2_04 JVMs, and fixed in
-1.4.2_06 (see ID 4917709) that makes those JVMs to occassionally crash with SIGSEGV
-during backport stress tests,
-particularly MapLoops and MapChecks. It is therefore recommended to use JVM versions
-1.4.2_06 or newer when using the backport (although the crashes seem to not happen also
-on 1.4.2_03, and perhaps on earlier JVMs). Detected in version: 2.0.
-</p>
-<p>
-<strong>Note: </strong>due to what is apparently a bug in SUN JVM implementations
-for Solaris, observed on 1.4.2_03 and 1.4.2_06,
-the 'ExecutorsTest.testPrivilegedThreadFactory()'
-unit test fails with ClassNotFoundException when launched from a class path
-that has backport classes stored as individual files in the "classes" directory. The
-problem disappears when the classes are put in a JAR file. The bug is most likely
-related to handling context class loaders. It is therefore advised to use JAR
-files instead of class files when running code that explicitly or implicitly
-modifies context class loaders, as does privileged thread factory.
-Detected in version: 2.0.
-</p>
-<p>
-<strong>Note: </strong>missed signals have been observed on Linux 2.6.3-7 kernel
-for SMP w/64GB support under contention and in the presence of frequent timeouts.
-(The bug was captured during TimeoutProducerConsumerLoops on SynchronousQueue).
-Apparently, this is caused by a kernel bug. The problem have been observed on
-several different JVMs. It does not occur on newer kernels.
-Detected in version: 2.0.
-</p>
-<p>
-As evident from the above, IT IS CRUCIAL THAT YOU RUN THE STRESS TESTS on the
-target configuration before using the backport in a production environment.
-Concurrency issues are tricky, and possible bugs in JVMs, operating systems,
-and this software, usually won't show up until under heavy loads. Stress tests
-included with this distribution test this software under extreme conditions,
-so if they are consistently passing, there's a very good chance that everything
-works fine.
-</p>
-
-<h2>Changelog</h2>
-
-<p>
-
-Version 2.2 (Jun 4, 2006) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-2.2/backport-util-concurrent-2.2-changelog.html">CVS log</a>]
-
-<ul>
-<li>New features</li>
- <ul>
- <li>The backport now compiles under Java 5.0.</li>
- <li>Enhancements in the Navigable[Map,Set] interfaces.</li>
- <li>Blocking atomic multi-acquires in fair semaphores.</li>
- <li>Javadoc enhancements (reconciled with recent java.util.concurrent).</li>
- <li>Shutdown upon finalization for factory-created executors.</li>
- </ul>
-<li>Bug fixes</li>
- <ul>
- <li>broken type-checked map in Collections. Thanks for Taras Puchko for finding this bug
- and submitting the fix.</li>
- <li>Collections.reverseComparator(Comparator) not working properly when null passed as
- the argument.</li>
- </ul>
-<li>Tests</li>
- <ul>
- <li>Updated and reconciled with java.util.concurrent tests.</li>
- </ul>
-</ul>
-
-
-Version 2.1 (Jan 28, 2006) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-2.1/backport-util-concurrent-2.1-changelog.html">CVS log</a>]
-<ul>
-<li>New features</li>
- <ul>
- <li>Descending iterators in deques</li>
- <li>Use newTaskFor() in ExecutionCompletionService.submit()</li>
- <li>toArray(Object[]) appends null at the end in LinkedBlockingQueue</li>
- <li>Overflow detection in ReentrantLock</li>
- <li>ReentrantReadWriteLock: better conformance with JSR 166 by adding public inner classes for ReadLock and WriteLock</li>
- <li>CopyOnWriteArraySet.equals() optimized towards small sets</li>
- <li>Snapshot iterators in queues</li>
- <li>Improved performance of toArray() in several collection classes</li>
- <li>More collection stuff ported, including new things in Arrays, and base collection classes with toArray() supporting
- concurrent collections</li>
- <li>Improved comparison of ScheduledFutureTasks in the ScheduledThreadPoolExecutor</li>
- </ul>
-<li>Licensing</li>
-<ul>
- <li>New, public domain implementations for CopyOnWriteArrayList, TreeMap, TreeSet, LinkedList, Collections, Arrays</li>
-</ul>
-<li>Bug fixes</li>
- <ul>
- <li>Methods equals() and hashCode() were broken in PriorityQueue. The fix allows PriorityQueues to be used as hash keys.</li>
- <li>ReentrantReadWriteLock.getWriteHoldCount could return a posititive value even if the write lock was not owned by the inquiring thread</li>
- <li>Condition variables were not working properly with reentrant locks when the hold count was greater than 1. Await methods were releasing only a single hold, not all of them, as they should</li>
- <li>Handling of non-comparable entries (which is an erroneous condition) by priority queues has been made more
- deterministic. (This issue/fix does not affect correctly written programs)</li>
- <li>Fix of CR 6312056 (ConcurrentHashMap.entrySet().iterator() can return entry with never-existent value)</li>
- <li>Livelock in Exchanger if used by more than two threads</li>
- <li>Erroneous behavior of interrupted CyclicBarrier and locks on some (buggy) JVMs (thanks to Yew-Yap Goh for
- reporting this)</li>
- </ul>
-<li>Tests</li>
- <ul>
- <li>New and improved "loops" tests, including CollectionLoops, IteratorLoops, StringMapLoops,
- TSPExchangerTest, TimeoutExchangerLoops, UnboundedQueueFillEmptyLoops, EntryTest</li>
- <li>New "serial compatibility" test</li>
- </ul>
-</ul>
-
-Version 2.0_01 (Aug 3, 2005) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-2.0_01/backport-util-concurrent-2.0_01-changelog.html">CVS log</a>]
-<ul>
-<li>Compatibility fix: ConcurrentHashMap was no longer inheriting from java.util.AbstractMap, although it was in version 1.1_01. Now it does again.</li>
-<li>Licensing: new, public-domain implementation of PriorityQueue, and refactoring of backported AbstractMap so that it also contains only the public domain code.</li>
-</ul>
-Version 2.0 (Jul 6, 2005) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-2.0/backport-util-concurrent-2.0-changelog.html">CVS log</a>]
-<ul>
-<li>New features</li>
-<ul>
-<li>Features and fixes resulting from reconcillation with JSR 166 as of Jul 4,
- such as:
- lazySet in atomics,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/AbstractExecutorService.html#newTaskFor(java.lang.Runnable, java.lang.Object)">AbstractExecutorService.newTaskFor()</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/RunnableFuture.html">RunnableFuture</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/RunnableScheduledFuture.html">RunnableScheduledFuture</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/ScheduledThreadPoolExecutor.html#decorateTask(java.lang.Runnable, edu.emory.mathcs.backport.java.util.concurrent.RunnableScheduledFuture)">ScheduledThreadPoolExecutor.decorateTask()</a>,
- better interrupt detection in ThreadPoolExecutor, avoiding garbage retention
- with timeouts in SynchronousQueue, fixed reset in CyclicBarrier,
- remove(x,null) -> false in ConcurrentHashMap, changes in navigable maps,
- addAll fixed in CopyOnWriteArrayList, etc.
-
-</li>
-<li>New backported classes:
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentLinkedQueue.html">ConcurrentLinkedQueue</a>,
- ConcurrentSkipList[<a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentSkipListMap.html">Map</a>,<a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/ConcurrentSkipListSet.html">Set</a>]</li>
-<li>Optimizations (replacement of ReentrantLock by synchronized) in:
- CyclicBarrier, DelayQueue, Exchanger, ThreadPoolExecutor</li>
-<li>Optimizations of atomic variables (simple reads are now volatile rather than
- synchronized)</li>
-<li>New backported methods in the fair implementation of the ReentrantLock:
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.html#hasWaiters(edu.emory.mathcs.backport.java.util.concurrent.locks.Condition)">hasWaiters(Condition)</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.html#getWaitQueueLength(edu.emory.mathcs.backport.java.util.concurrent.locks.Condition)">getWaitQueueLength(Condition)</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/locks/ReentrantLock.html#getWaitingThreads(edu.emory.mathcs.backport.java.util.concurrent.locks.Condition)">getWaitingThreads(Condition)</a></li>
-<li>Retrofitted collection classes:
- <a href="doc/api/edu/emory/mathcs/backport/java/util/AbstractMap.html">AbstractMap</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/Collections.html">Collections</a>,
- <a href="doc/api/edu/emory/mathcs/backport/java/util/LinkedList.html">LinkedList</a>,
- Tree[<a href="doc/api/edu/emory/mathcs/backport/java/util/TreeMap.html">Map</a>,<a href="doc/api/edu/emory/mathcs/backport/java/util/TreeSet.html">Set</a>]</li>
-<li>Numerous javadoc clarifications and fixes</li>
-</ul>
-<li>Bug fixes</li>
-<ul>
-<li>Upon deserialization, ReentrantLock, ReentrantReadWriteLock, and Semaphore
- were potentially in a locked (or even illegal) state, contrary to the javadoc</li>
-<li>In the fair implementation of ReentrantLock, wait queues of <em>condition variables</em>
- were not actually fair - they are now</li>
-<li>LinkedBlockingQueue had potential deadlocks in remove() and toArray(). It has
- now been replaced by a completely new implementation, based on java.u.c (rather
- than dl.u.c)</li>
-<li>Race condition in Condition.awaitUninterruptibly() could cause signals to be
- missed if they were coinciding with interrupt attempts</li>
-</ul>
-
-<li>Tests</li>
-<ul>
-<li>Updated unit tests for atomics, AbstractQueuedSynchonizer, ConcurrentHashMap,
- CyclicBarrier, ExecutorCompletionService, LinkedBlockingQueue, ReentrantLock,
- ReentrantReadWriteLock, ScheduledExecutor, ThreadPoolExecutor</li>
-<li>New unit tests for ConcurrentLinkedQueue, ConcurrentSkipList[Map,Set],
- Utils.nanoTime(), LinkedList, Tree[Map,Set]</li>
-<li>Updated numerous stress tests, and new ones added: CachedThreadPoolLoops,
- [Collection,Map]WordLoops, CASLoops, and more</li>
-</ul>
-</ul>
-Version 1.1_01 (Feb 7, 2005) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-1.1_01/backport-util-concurrent-1.1_01-changelog.html">CVS log</a>]
-<ul>
-<li>Bugfix: race condition in the fair implementation of ReentrantLock
-caused it to occassionally cause IllegalMonitorState exceptions. Non-fair
-implementation was not affected, however, classes that depend on fair reentrant locks,
-namely: fair ArrayBlockingQueue, fair SynchronousQueue, and PriorityQueue, were
-affected.
-Thanks to Ramesh Nethi for reporting this bug and helping to track it down.</li>
-
-<li>Testing: backport has been stress-tested using the "loops" tests
-(courtesy of Doug Lea and the JSR 166 Expert Group). The tests
-are included in the development source bundle.</li>
-</ul>
-
-Version 1.1 (Jan 21, 2005) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-1.1/backport-util-concurrent-1.1-changelog.html">CVS log</a>]
-<ul>
-<li>Bugfix: on Windows platforms with Java 1.4.2, the library
-were sometimes behaving as if timeouts were ignored or misinterpreted,
-typically resulting in indefinite waits. This resulted from an internal
-timer overflow that occurred every several hours, and was also manifested
-as a discontinuity in System.nanoTime() values. The problem would happen
-if the overflow occurred during blocked timed wait, if additionally
-a spurious wakeup occurred after the overflow but before timeout
-in the underlying Object.wait().
-This has now been fixed; 1.0_01 users are urged to upgrade to version 1.1.
-Thanks to Ramesh Nethi for reporting this bug and greatly contributing
-to tracking it down.</li>
-
-<li>Feature: backport has been reconciled with JSR 166 CVS repository
- on Jan 14, 2005. This results in a handful of new things:
- <ul>
- <li>New
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/TimeUnit.html">time units</a>:
- MINUTES, HOURS, and DAYS.</li>
- <li><a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/ThreadPoolExecutor.html#allowCoreThreadTimeOut(boolean)">allowCoreThreadTimeOut</a>
- in ThreadPoolExecutor, which enables <em>bounded</em>
- pools that kills threads if they are idle for too long.</li>
- <li>ThreadPoolExecutor now handles excessive interruption requests more gracefully
- (previously, it was reported to be able to crash older JVMs).</li>
- <li><a href="doc/api/edu/emory/mathcs/backport/java/util/Deque.html">Deques</a>.</li>
- <li>Javadoc improvements.</li>
- </ul>
-</li>
-</ul>
-
-Version 1.0_01 (Dec 28, 2004) [<a href="http://www.mathcs.emory.edu/dcl/util/backport-util-concurrent/dist/backport-util-concurrent-1.0_01/backport-util-concurrent-1.0_01-changelog.html">CVS log</a>]
-<ul>
-<li>Feature: development source bundle with ant scripts allowing to build and
- test the distribution is now available for download.</li>
-
-<li>Feature: emulation of UncaughtExceptionHandler, in class
- <a href="doc/api/edu/emory/mathcs/backport/java/util/concurrent/helpers/ThreadHelpers.html">ThreadHelpers</a>.</li>
-
-<li>Documentation: improved, more consistent and accurate javadoc.</li>
-
-<li>Bugfix: NoClassDefFoundError when using nanoTime() on Java prior to 1.4.2.
- Thanks to Gabriel Wolosin for reporting this bug.</li>
-
-<li>Bugfix: deadlocks in ConcurrentLinkedQueue when drainTo() or clear() was
- invoked when there was blocked put(). Thanks to Jean Morissette for
- reporting this bug.</li>
-
-<li>Bugfix: minor glitch in Utils.nanoTime() would cause timer to lose
- accuracy, about 1ns every 11 days, if JVM was running continuously.
- (Note: as it turned out, the fix itself had a bug; see the log for
- version 1.1)</li>
-</ul>
-
-Version 1.0 (Dec 1, 2004)
-<ul>
-<li>Initial revision</li>
-</ul>
-
-<h2>Documentation and Support</h2>
-
-<p>
-For more information:
-<ul>
-<LI><a href="doc/api/">Browse Javadoc</a></LI>
-<LI>Consult the original
- <a href="http://gee.cs.oswego.edu/dl/concurrency-interest/">
- java.util.concurrent</a> documentation and Java 5.0
- <a href="http://java.sun.com/j2se/1.5.0/docs/guide/concurrency/overview.html">Concurrency Utilities Overview</a></LI>
-
-<li>Check the <a href="http://dcl.mathcs.emory.edu/util/backport-util-concurrent/">project Web page</a> for updates.</li>
-
-<li>For questions, comments, and discussion, use the
-<a href="http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest">Concurrency-Interest
-mailing list</a> (courtesy of Doug Lea and the JSR 166 Expert Group). Please clearly indicate
-that your message regards the backport rather than the original JSR 166 API, by prefixing
-the subject line with "backport: " and including appropriate annotation in the message body.
-You may also send
-e-mail directly to <a href="mailto:dawidk@mathcs.emory.edu">Dawid Kurzyniec</a>.</li>
-</ul>
-</p>
-
-<hr>
-Copyright (C) 2004-2006 <a href="http://dcl.mathcs.emory.edu/">Distributed Computing Laboratory</a>, Emory University<br>
-
-</body>
-</html>