Merge "Improve change-markers and diffs in some of j.u.concurrent."
diff --git a/ojluni/src/main/java/java/util/concurrent/CompletableFuture.java b/ojluni/src/main/java/java/util/concurrent/CompletableFuture.java
index b1de4f6..976bfe4 100644
--- a/ojluni/src/main/java/java/util/concurrent/CompletableFuture.java
+++ b/ojluni/src/main/java/java/util/concurrent/CompletableFuture.java
@@ -42,6 +42,8 @@
import java.util.function.Function;
import java.util.function.Supplier;
+// Android-note: Class javadoc changed to remove references to hidden OpenJDK 9 methods.
+
/**
* A {@link Future} that may be explicitly completed (setting its
* value and status), and may be used as a {@link CompletionStage},
@@ -2405,9 +2407,8 @@
* @param <U> the type of the value
* @return a new CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public <U> CompletableFuture<U> newIncompleteFuture() {
return new CompletableFuture<U>();
}
@@ -2422,9 +2423,8 @@
*
* @return the executor
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public Executor defaultExecutor() {
return ASYNC_POOL;
}
@@ -2442,9 +2442,8 @@
*
* @return the new CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public CompletableFuture<T> copy() {
return uniCopyStage();
}
@@ -2461,9 +2460,8 @@
*
* @return the new CompletionStage
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public CompletionStage<T> minimalCompletionStage() {
return uniAsMinimalStage();
}
@@ -2478,9 +2476,8 @@
* @param executor the executor to use for asynchronous execution
* @return this CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public CompletableFuture<T> completeAsync(Supplier<? extends T> supplier,
Executor executor) {
if (supplier == null || executor == null)
@@ -2498,9 +2495,8 @@
* to complete this CompletableFuture
* @return this CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public CompletableFuture<T> completeAsync(Supplier<? extends T> supplier) {
return completeAsync(supplier, defaultExecutor());
}
@@ -2516,9 +2512,8 @@
* {@code timeout} parameter
* @return this CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit) {
if (unit == null)
throw new NullPointerException();
@@ -2539,9 +2534,8 @@
* {@code timeout} parameter
* @return this CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public CompletableFuture<T> completeOnTimeout(T value, long timeout,
TimeUnit unit) {
if (unit == null)
@@ -2565,9 +2559,8 @@
* @param executor the base executor
* @return the new delayed executor
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public static Executor delayedExecutor(long delay, TimeUnit unit,
Executor executor) {
if (unit == null || executor == null)
@@ -2586,9 +2579,8 @@
* {@code delay} parameter
* @return the new delayed executor
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public static Executor delayedExecutor(long delay, TimeUnit unit) {
if (unit == null)
throw new NullPointerException();
@@ -2604,9 +2596,8 @@
* @param <U> the type of the value
* @return the completed CompletionStage
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public static <U> CompletionStage<U> completedStage(U value) {
return new MinimalStage<U>((value == null) ? NIL : value);
}
@@ -2619,9 +2610,8 @@
* @param <U> the type of the value
* @return the exceptionally completed CompletableFuture
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public static <U> CompletableFuture<U> failedFuture(Throwable ex) {
if (ex == null) throw new NullPointerException();
return new CompletableFuture<U>(new AltResult(ex));
@@ -2636,9 +2626,8 @@
* @param <U> the type of the value
* @return the exceptionally completed CompletionStage
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
public static <U> CompletionStage<U> failedStage(Throwable ex) {
if (ex == null) throw new NullPointerException();
return new MinimalStage<U>(new AltResult(ex));
diff --git a/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java b/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java
index 2b51d91..67c8622 100644
--- a/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java
+++ b/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java
@@ -2562,7 +2562,8 @@
* A padded cell for distributing counts. Adapted from LongAdder
* and Striped64. See their internal docs for explanation.
*/
- //@jdk.internal.vm.annotation.Contended // Android-removed
+ // Android-removed: @Contended, this hint is not used by the Android runtime.
+ //@jdk.internal.vm.annotation.Contended
static final class CounterCell {
volatile long value;
CounterCell(long x) { value = x; }
diff --git a/ojluni/src/main/java/java/util/concurrent/CountedCompleter.java b/ojluni/src/main/java/java/util/concurrent/CountedCompleter.java
index f65371aa..a29208e 100644
--- a/ojluni/src/main/java/java/util/concurrent/CountedCompleter.java
+++ b/ojluni/src/main/java/java/util/concurrent/CountedCompleter.java
@@ -42,7 +42,7 @@
* presence of subtask stalls and blockage than are other forms of
* ForkJoinTasks, but are less intuitive to program. Uses of
* CountedCompleter are similar to those of other completion based
- * components
+ * components (such as {@link java.nio.channels.CompletionHandler})
* except that multiple <em>pending</em> completions may be necessary
* to trigger the completion action {@link #onCompletion(CountedCompleter)},
* not just one.
diff --git a/ojluni/src/main/java/java/util/concurrent/Exchanger.java b/ojluni/src/main/java/java/util/concurrent/Exchanger.java
index b1e9324..f01a705 100644
--- a/ojluni/src/main/java/java/util/concurrent/Exchanger.java
+++ b/ojluni/src/main/java/java/util/concurrent/Exchanger.java
@@ -306,7 +306,8 @@
* Nodes hold partially exchanged data, plus other per-thread
* bookkeeping. Padded via @Contended to reduce memory contention.
*/
- //@jdk.internal.vm.annotation.Contended // Android-removed
+ // Android-removed: @Contended, this hint is not used by the Android runtime.
+ //@jdk.internal.vm.annotation.Contended
static final class Node {
int index; // Arena index
int bound; // Last recorded value of Exchanger.bound
diff --git a/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java b/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java
index 9cf9b2d..04ad7d7 100644
--- a/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java
+++ b/ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java
@@ -162,7 +162,8 @@
* @since 1.7
* @author Doug Lea
*/
-//@jdk.internal.vm.annotation.Contended // Android-removed
+// Android-removed: @Contended, this hint is not used by the Android runtime.
+//@jdk.internal.vm.annotation.Contended
public class ForkJoinPool extends AbstractExecutorService {
/*
@@ -781,7 +782,8 @@
* arrays sharing cache lines. The @Contended annotation alerts
* JVMs to try to keep instances apart.
*/
- //@jdk.internal.vm.annotation.Contended // Android-removed
+ // Android-removed: @Contended, this hint is not used by the Android runtime.
+ //@jdk.internal.vm.annotation.Contended
static final class WorkQueue {
/**
@@ -820,7 +822,8 @@
volatile Thread parker; // == owner during call to park; else null
volatile ForkJoinTask<?> currentJoin; // task being joined in awaitJoin
- // @jdk.internal.vm.annotation.Contended("group2") // segregate // Android-removed
+ // Android-removed: @Contended, this hint is not used by the Android runtime.
+ // @jdk.internal.vm.annotation.Contended("group2") // segregate
volatile ForkJoinTask<?> currentSteal; // nonnull when running some task
WorkQueue(ForkJoinPool pool, ForkJoinWorkerThread owner) {
diff --git a/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java b/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java
index 1f25549..efccfa5 100644
--- a/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java
+++ b/ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java
@@ -1300,9 +1300,8 @@
*
* @return a task, or {@code null} if none are available
* @since 9
- * @hide
+ * @hide API from OpenJDK 9, not yet exposed on Android.
*/
- // Android-changed: hidden
protected static ForkJoinTask<?> pollSubmission() {
Thread t;
return ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) ?
diff --git a/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java b/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java
index 03fa594..195f8ac 100644
--- a/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java
+++ b/ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java
@@ -461,6 +461,7 @@
// stream methods, coded in a way intended to better isolate for
// maintenance purposes the small differences across forms.
+
/**
* Returns a stream producing the given {@code streamSize} number of
* pseudorandom {@code int} values.
diff --git a/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java b/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java
index b7d2246..b0096a4 100644
--- a/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java
+++ b/ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java
@@ -1545,6 +1545,7 @@
return handler;
}
+ // Android-changed: Tolerate maximumPoolSize >= corePoolSize during setCorePoolSize().
/**
* Sets the core number of threads. This overrides any value set
* in the constructor. If the new value is smaller than the
@@ -1556,15 +1557,15 @@
* @throws IllegalArgumentException if {@code corePoolSize < 0}
* @see #getCorePoolSize
*/
- // Android-changed: Reverted code that threw an IAE when
- // {@code corePoolSize} is greater than the {@linkplain #getMaximumPoolSize()
- // maximum pool size}. This is due to defective code in a commonly used third
- // party library that does something like :
- //
- // exec.setCorePoolSize(N);
- // exec.setMaxPoolSize(N);
public void setCorePoolSize(int corePoolSize) {
+ // BEGIN Android-changed: Tolerate maximumPoolSize >= corePoolSize during setCorePoolSize().
+ // This reverts a change that threw an IAE on that condition. This is due to defective code
+ // in a commonly used third party library that does something like exec.setCorePoolSize(N)
+ // before doing exec.setMaxPoolSize(N).
+ //
+ // if (corePoolSize < 0 || maximumPoolSize < corePoolSize)
if (corePoolSize < 0)
+ // END Android-changed: Tolerate maximumPoolSize >= corePoolSize during setCorePoolSize().
throw new IllegalArgumentException();
int delta = corePoolSize - this.corePoolSize;
this.corePoolSize = corePoolSize;
diff --git a/ojluni/src/main/java/java/util/concurrent/atomic/Striped64.java b/ojluni/src/main/java/java/util/concurrent/atomic/Striped64.java
index e52729a..2a8f327 100644
--- a/ojluni/src/main/java/java/util/concurrent/atomic/Striped64.java
+++ b/ojluni/src/main/java/java/util/concurrent/atomic/Striped64.java
@@ -119,7 +119,8 @@
* JVM intrinsics note: It would be possible to use a release-only
* form of CAS here, if it were provided.
*/
- // @jdk.internal.vm.annotation.Contended // Android-removed
+ // Android-removed: @Contended, this hint is not used by the Android runtime.
+ // @jdk.internal.vm.annotation.Contended
static final class Cell {
volatile long value;
Cell(long x) { value = x; }
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java b/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
index 894de90..602b5ce 100644
--- a/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
+++ b/ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
@@ -886,6 +886,8 @@
* @param arg the acquire argument
* @return {@code true} if interrupted while waiting
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
final boolean acquireQueued(final Node node, int arg) {
try {
boolean interrupted = false;
@@ -1218,6 +1220,8 @@
* {@link #tryAcquire} but is otherwise uninterpreted and
* can represent anything you like.
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
public final void acquire(int arg) {
if (!tryAcquire(arg) &&
acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
@@ -1281,6 +1285,8 @@
* can represent anything you like.
* @return the value returned from {@link #tryRelease}
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
public final boolean release(int arg) {
if (tryRelease(arg)) {
Node h = head;
@@ -1361,6 +1367,8 @@
* and can represent anything you like.
* @return the value returned from {@link #tryReleaseShared}
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
public final boolean releaseShared(int arg) {
if (tryReleaseShared(arg)) {
doReleaseShared();
diff --git a/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java b/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java
index 9df2505..3c1c492 100644
--- a/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java
+++ b/ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java
@@ -127,6 +127,8 @@
* Performs non-fair tryLock. tryAcquire is implemented in
* subclasses, but both need nonfair try for trylock method.
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
final boolean nonfairTryAcquire(int acquires) {
final Thread current = Thread.currentThread();
int c = getState();
@@ -146,6 +148,8 @@
return false;
}
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
protected final boolean tryRelease(int releases) {
int c = getState() - releases;
if (Thread.currentThread() != getExclusiveOwnerThread())
@@ -203,6 +207,8 @@
* Performs lock. Try immediate barge, backing up to normal
* acquire on failure.
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
final void lock() {
if (compareAndSetState(0, 1))
setExclusiveOwnerThread(Thread.currentThread());
@@ -229,6 +235,8 @@
* Fair version of tryAcquire. Don't grant access unless
* recursive call or no waiters or is first.
*/
+ // Android-removed: @ReservedStackAccess from OpenJDK 9, not available on Android.
+ // @ReservedStackAccess
protected final boolean tryAcquire(int acquires) {
final Thread current = Thread.currentThread();
int c = getState();