AO Concurrent Changelog

ao-concurrent-4.0.5

Release Notes

  • Accepting negative task submit delay, convert to zero.
  • Logging timer task errors instead of propagating and killing timer.
  • Clearing thread interrupted state before returning to timer.
  • Set a distinct timer thread name.
  • Executors implements a toString with a unique ID (with possible 64-bit overflow duplication) to help debugging.
  • Executors close thread is named to help debugging.
  • Fixed bug where all futures from all executors were canceled when any executor was closed.

ao-concurrent-4.0.4

Release Notes

  • Improved Java Applet / Web Start compatibility:
    1. Reduced expected SecurityException logging from WARNING to FINE.

ao-concurrent-4.0.3

Release Notes

  • Fixed race condition in ConcurrencyReducer and KeyedConcurrencyReducer where a new thread coming in when a result is already finished is never notified and deadlocks the reducer. This is done by returning early when the result is finished, instead of entering the wait/notify code path.

ao-concurrent-4.0.2

Release Notes

  • Now properly restoring Thread interrupted state on InterruptedException.

ao-concurrent-4.0.1

Release Notes

  • notify() replaced with notifyAll() since more than one thread can be waiting on Future.get().

ao-concurrent-4.0.0

Release Notes

  • Now supports Java 9+ modules with included module-info.class.
  • Maven artifact relocated from com.aoindustries:ao-concurrent to com.aoapps:ao-concurrent.
  • Package renamed from com.aoindustries.concurrent to com.aoapps.concurrent.

ao-concurrent-3.1.0

Release Notes

  • ConcurrencyLimiter divided into two implementations: KeyedConcurrencyReducer (when limiting by key) and ConcurrencyReducer when is a single reduction.
  • On ThreadDeath the first thread still gets the actual ThreadDeath, while all waiting threads now get ExecutionException. Previously, on thread death waiting threads were never notified.

ao-concurrent-3.0.0

Release Notes

  • Converted from Disposable (deprecated) to AutoCloseable, which supports try-with-resources in Java 1.7+.

ao-concurrent-2.0.1

Release Notes

  • The sequential executor is no longer substituted in place of the per-processor executor on single-CPU systems. This is because the sequential executor and per-processor executor have different behavior when Future.get(…) is never called. When Future.get(…) is never called, the sequential executor does not execute the task while the per-processor will still execute it in the background.

ao-concurrent-2.0.0

Release Notes

  • Minimum Java version changed from 1.7 to 1.8.
  • Reduced use of property substitutions in pom.xml. This is to help 3rd-party parsers that fail to perform full Maven-compatible substitutions.
  • Renamed package from com.aoindustries.util.concurrent to com.aoindustries.concurrent. Resolves split-package with AO Lang.

ao-concurrent-1.1.2

Release Notes

  • Using ;-split-package:=first of maven-bundle-plugin to avoid bundling the classes in the split-package com.aoindustries.util.concurrent from AO Lang.

    This split-package is transitional. In the future we will have more fine-grained *-i18n projects.

ao-concurrent-1.1.1

Release Notes

  • Using managed dependencies:
    1. This project uses managed dependencies.
    2. This project's managed dependencies may also be imported by other projects.

ao-concurrent-1.1.0

Release Notes

  • Minimum Java version changed from 1.6 to 1.7.

ao-concurrent-1.0.3

Release Notes

  • Updated dependencies.

ao-concurrent-1.0.2

Release Notes

  • New AO OSS Parent POM to simplify pom.xml files.
  • Project documentation moved to per-project book in SemanticCMS format.
  • Added changelog as top-level project link.

ao-concurrent-1.0.1

Release Notes

  • Accepting less specific generic bounds.
  • Improved Javadoc formatting.
  • Improved README formatting.

ao-concurrent-1.0.0

Release Notes

  • Project moved to GitHub and Maven.
  • Added multiple per-processor thread pools to avoid possible deadlock while also avoiding blowing-out to unbounded concurrency.
  • Now automatically maintains some ThreadLocal values between caller and executor during concurrent processing, and provides wrapper hook for subclasses to extend.
  • Cleaned-up executors API.
  • Providing access to preferred concurrency.
  • Added a sequential executor for when non-threaded execution is desired.
  • Each lock object now a small empty class to help identify lock contention.

    The lock contention profiler in NetBeans is just showing "java.lang.Object" all over, and can't seem to get from the lock object id to the actual object in the heap dump using OQL (id not found).

  • Reduced lock contention significantly through atomic operations and fine-grained locking.