summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2006-11-07 08:42:50 +0000
committerMartin Ritchie <ritchiem@apache.org>2006-11-07 08:42:50 +0000
commit1e3204409e8ee5962d942891fb562f5021a1de59 (patch)
treef3613b7893ef6e3a7f66c57189cf3da781d3a3be /java
parent15f1956f9ddf4844add35ac9d7d69b4018206513 (diff)
downloadqpid-python-1e3204409e8ee5962d942891fb562f5021a1de59.tar.gz
From: end-user release.
http://dcl.mathcs.emory.edu/util/backport-util-concurrent/ git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@472033 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/common/lib/backport-util-concurrent/LEGAL8
-rw-r--r--java/common/lib/backport-util-concurrent/README.html614
-rw-r--r--java/common/lib/backport-util-concurrent/license.html41
3 files changed, 663 insertions, 0 deletions
diff --git a/java/common/lib/backport-util-concurrent/LEGAL b/java/common/lib/backport-util-concurrent/LEGAL
new file mode 100644
index 0000000000..340d1022b0
--- /dev/null
+++ b/java/common/lib/backport-util-concurrent/LEGAL
@@ -0,0 +1,8 @@
+The backport-util-concurrent software has been released to the public domain,
+as explained at: http://creativecommons.org/licenses/publicdomain.
+
+Acknowledgements: backport-util-concurrent is based in large part on the public
+domain sources from:
+1) JSR166,
+2) package dl.util.concurrent,
+3) Doug Lea's "collections" package.
diff --git a/java/common/lib/backport-util-concurrent/README.html b/java/common/lib/backport-util-concurrent/README.html
new file mode 100644
index 0000000000..7e4ab10e14
--- /dev/null
+++ b/java/common/lib/backport-util-concurrent/README.html
@@ -0,0 +1,614 @@
+<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>
diff --git a/java/common/lib/backport-util-concurrent/license.html b/java/common/lib/backport-util-concurrent/license.html
new file mode 100644
index 0000000000..e9b095683b
--- /dev/null
+++ b/java/common/lib/backport-util-concurrent/license.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
+<html><head><title>Creative Commons Public Domain</title>
+
+<body>
+
+<p align="center"><em>Copyright-Only Dedication (based on United States law) or Public Domain Certification</em></p>
+
+ <p>The
+person or persons who have associated work with this document (the
+"Dedicator" or "Certifier") hereby either (a) certifies that, to the
+best of his knowledge, the work of authorship identified is in the
+public domain of the country from which the work is published, or (b)
+hereby dedicates whatever copyright the dedicators holds in the work of
+authorship identified below (the "Work") to the public domain. A
+certifier, morever, dedicates any copyright interest he may have in the
+associated work, and for these purposes, is described as a "dedicator"
+below.</p>
+
+ <p>A certifier has taken reasonable steps to verify
+the copyright status of this work. Certifier recognizes that his good
+faith efforts may not shield him from liability if in fact the work
+certified is not in the public domain.</p>
+
+ <p>Dedicator makes
+this dedication for the benefit of the public at large and to the
+detriment of the Dedicator's heirs and successors. Dedicator intends
+this dedication to be an overt act of relinquishment in perpetuity of
+all present and future rights under copyright law, whether vested or
+contingent, in the Work. Dedicator understands that such relinquishment
+of all rights includes the relinquishment of all rights to enforce (by
+lawsuit or otherwise) those copyrights in the Work.</p>
+
+ <p>Dedicator
+recognizes that, once placed in the public domain, the Work may be
+freely reproduced, distributed, transmitted, used, modified, built
+upon, or otherwise exploited by anyone for any purpose, commercial or
+non-commercial, and in any way, including by methods that have not yet
+been invented or conceived.</p>
+ </div>
+</div>
+</body></html> \ No newline at end of file