1 /*
2  * Written by Doug Lea with assistance from members of JCP JSR-166
3  * Expert Group and released to the public domain, as explained at
4  * http://creativecommons.org/publicdomain/zero/1.0/
5  */
6 
7 package java.util.concurrent;
8 
9 /**
10  * A task that returns a result and may throw an exception.
11  * Implementors define a single method with no arguments called
12  * {@code call}.
13  *
14  * <p>The {@code Callable} interface is similar to {@link
15  * java.lang.Runnable}, in that both are designed for classes whose
16  * instances are potentially executed by another thread.  A
17  * {@code Runnable}, however, does not return a result and cannot
18  * throw a checked exception.
19  *
20  * <p>The {@link Executors} class contains utility methods to
21  * convert from other common forms to {@code Callable} classes.
22  *
23  * @see Executor
24  * @since 1.5
25  * @author Doug Lea
26  * @param <V> the result type of method {@code call}
27  */
28 @FunctionalInterface
29 public interface Callable<V> {
30     /**
31      * Computes a result, or throws an exception if unable to do so.
32      *
33      * @return computed result
34      * @throws Exception if unable to compute a result
35      */
call()36     V call() throws Exception;
37 }
38