mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8054834: Modular Source Code
Co-authored-by: Alan Bateman <alan.bateman@oracle.com> Co-authored-by: Alex Buckley <alex.buckley@oracle.com> Co-authored-by: Erik Joelsson <erik.joelsson@oracle.com> Co-authored-by: Jonathan Gibbons <jonathan.gibbons@oracle.com> Co-authored-by: Karen Kinnear <karen.kinnear@oracle.com> Co-authored-by: Magnus Ihse Bursie <magnus.ihse.bursie@oracle.com> Co-authored-by: Mandy Chung <mandy.chung@oracle.com> Co-authored-by: Mark Reinhold <mark.reinhold@oracle.com> Co-authored-by: Paul Sandoz <paul.sandoz@oracle.com> Reviewed-by: alanb, chegar, ihse, mduigou
This commit is contained in:
parent
d1c0417898
commit
3bc69d393d
12567 changed files with 5941 additions and 5903 deletions
169
jdk/src/java.base/share/classes/java/util/concurrent/Future.java
Normal file
169
jdk/src/java.base/share/classes/java/util/concurrent/Future.java
Normal file
|
@ -0,0 +1,169 @@
|
|||
/*
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is available under and governed by the GNU General Public
|
||||
* License version 2 only, as published by the Free Software Foundation.
|
||||
* However, the following notice accompanied the original version of this
|
||||
* file:
|
||||
*
|
||||
* Written by Doug Lea with assistance from members of JCP JSR-166
|
||||
* Expert Group and released to the public domain, as explained at
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
package java.util.concurrent;
|
||||
|
||||
/**
|
||||
* A {@code Future} represents the result of an asynchronous
|
||||
* computation. Methods are provided to check if the computation is
|
||||
* complete, to wait for its completion, and to retrieve the result of
|
||||
* the computation. The result can only be retrieved using method
|
||||
* {@code get} when the computation has completed, blocking if
|
||||
* necessary until it is ready. Cancellation is performed by the
|
||||
* {@code cancel} method. Additional methods are provided to
|
||||
* determine if the task completed normally or was cancelled. Once a
|
||||
* computation has completed, the computation cannot be cancelled.
|
||||
* If you would like to use a {@code Future} for the sake
|
||||
* of cancellability but not provide a usable result, you can
|
||||
* declare types of the form {@code Future<?>} and
|
||||
* return {@code null} as a result of the underlying task.
|
||||
*
|
||||
* <p>
|
||||
* <b>Sample Usage</b> (Note that the following classes are all
|
||||
* made-up.)
|
||||
* <pre> {@code
|
||||
* interface ArchiveSearcher { String search(String target); }
|
||||
* class App {
|
||||
* ExecutorService executor = ...
|
||||
* ArchiveSearcher searcher = ...
|
||||
* void showSearch(final String target)
|
||||
* throws InterruptedException {
|
||||
* Future<String> future
|
||||
* = executor.submit(new Callable<String>() {
|
||||
* public String call() {
|
||||
* return searcher.search(target);
|
||||
* }});
|
||||
* displayOtherThings(); // do other things while searching
|
||||
* try {
|
||||
* displayText(future.get()); // use future
|
||||
* } catch (ExecutionException ex) { cleanup(); return; }
|
||||
* }
|
||||
* }}</pre>
|
||||
*
|
||||
* The {@link FutureTask} class is an implementation of {@code Future} that
|
||||
* implements {@code Runnable}, and so may be executed by an {@code Executor}.
|
||||
* For example, the above construction with {@code submit} could be replaced by:
|
||||
* <pre> {@code
|
||||
* FutureTask<String> future =
|
||||
* new FutureTask<String>(new Callable<String>() {
|
||||
* public String call() {
|
||||
* return searcher.search(target);
|
||||
* }});
|
||||
* executor.execute(future);}</pre>
|
||||
*
|
||||
* <p>Memory consistency effects: Actions taken by the asynchronous computation
|
||||
* <a href="package-summary.html#MemoryVisibility"> <i>happen-before</i></a>
|
||||
* actions following the corresponding {@code Future.get()} in another thread.
|
||||
*
|
||||
* @see FutureTask
|
||||
* @see Executor
|
||||
* @since 1.5
|
||||
* @author Doug Lea
|
||||
* @param <V> The result type returned by this Future's {@code get} method
|
||||
*/
|
||||
public interface Future<V> {
|
||||
|
||||
/**
|
||||
* Attempts to cancel execution of this task. This attempt will
|
||||
* fail if the task has already completed, has already been cancelled,
|
||||
* or could not be cancelled for some other reason. If successful,
|
||||
* and this task has not started when {@code cancel} is called,
|
||||
* this task should never run. If the task has already started,
|
||||
* then the {@code mayInterruptIfRunning} parameter determines
|
||||
* whether the thread executing this task should be interrupted in
|
||||
* an attempt to stop the task.
|
||||
*
|
||||
* <p>After this method returns, subsequent calls to {@link #isDone} will
|
||||
* always return {@code true}. Subsequent calls to {@link #isCancelled}
|
||||
* will always return {@code true} if this method returned {@code true}.
|
||||
*
|
||||
* @param mayInterruptIfRunning {@code true} if the thread executing this
|
||||
* task should be interrupted; otherwise, in-progress tasks are allowed
|
||||
* to complete
|
||||
* @return {@code false} if the task could not be cancelled,
|
||||
* typically because it has already completed normally;
|
||||
* {@code true} otherwise
|
||||
*/
|
||||
boolean cancel(boolean mayInterruptIfRunning);
|
||||
|
||||
/**
|
||||
* Returns {@code true} if this task was cancelled before it completed
|
||||
* normally.
|
||||
*
|
||||
* @return {@code true} if this task was cancelled before it completed
|
||||
*/
|
||||
boolean isCancelled();
|
||||
|
||||
/**
|
||||
* Returns {@code true} if this task completed.
|
||||
*
|
||||
* Completion may be due to normal termination, an exception, or
|
||||
* cancellation -- in all of these cases, this method will return
|
||||
* {@code true}.
|
||||
*
|
||||
* @return {@code true} if this task completed
|
||||
*/
|
||||
boolean isDone();
|
||||
|
||||
/**
|
||||
* Waits if necessary for the computation to complete, and then
|
||||
* retrieves its result.
|
||||
*
|
||||
* @return the computed result
|
||||
* @throws CancellationException if the computation was cancelled
|
||||
* @throws ExecutionException if the computation threw an
|
||||
* exception
|
||||
* @throws InterruptedException if the current thread was interrupted
|
||||
* while waiting
|
||||
*/
|
||||
V get() throws InterruptedException, ExecutionException;
|
||||
|
||||
/**
|
||||
* Waits if necessary for at most the given time for the computation
|
||||
* to complete, and then retrieves its result, if available.
|
||||
*
|
||||
* @param timeout the maximum time to wait
|
||||
* @param unit the time unit of the timeout argument
|
||||
* @return the computed result
|
||||
* @throws CancellationException if the computation was cancelled
|
||||
* @throws ExecutionException if the computation threw an
|
||||
* exception
|
||||
* @throws InterruptedException if the current thread was interrupted
|
||||
* while waiting
|
||||
* @throws TimeoutException if the wait timed out
|
||||
*/
|
||||
V get(long timeout, TimeUnit unit)
|
||||
throws InterruptedException, ExecutionException, TimeoutException;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue